Problem with LATIN1 characters from Perl-DBI

Problem with LATIN1 characters from Perl-DBI

am 07.09.2004 14:06:31 von andreak

--nextPart45608388.JjGcsCxpjn
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi.
I have a database created with -E LATIN1. Inserting norwegian characters li=
k=20
'=F8' works perfectly from JDBC, but from Perl, it stores the word 's=F8ker=
' as=20
'søker'(UNICODE).

perl --version:
This is perl, v5.8.3 built for i386-linux-thread-multi
A Mandrake-10 Linux system.

I first had the problem printing out LATIN1 chars to stdout too, but solved=
=20
that by using the pragma
use encoding 'ISO-8859-1';

I've tried:
$dbh->do("set CLIENT_ENCODING TO 'ISO-8859-1'")=20
or die("Couldn't set encoding to ISO-8859-1");
but that didn't work.

Any hints anyone?

--=20
Andreas Joseph Krogh
Senior Software Developer / Manager
gpg public_key: http://dev.officenet.no/~andreak/public_key.asc
------------------------+----------------------------------- ----------+
OfficeNet AS | Two tomatoes in a fridge. One tomato says |
Hoffsveien 17 | to the other, "It's cold in here, isn't it?"|
PO. Box 425 Sk=F8yen | The other tomato says, "F**king hell, |
0213 Oslo | a talking tomato!" |
NORWAY | |
Phone : +47 22 13 01 00 | |
Direct: +47 22 13 10 03 | |
Mobile: +47 909 56 963 | |
------------------------+----------------------------------- ----------+


--nextPart45608388.JjGcsCxpjn
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBBPaRQUopImDh2gfQRAgy3AJ9xcpNUEA3v1wotOGpWkV/UbuwD5wCf c1YV
0lg7iYcN4gy3F+MPtiQFI/Y=
=D21M
-----END PGP SIGNATURE-----

--nextPart45608388.JjGcsCxpjn--

Re: Problem with LATIN1 characters from Perl-DBI

am 07.09.2004 15:53:20 von andreak

--nextPart1276003.4p2BVEvn1k
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Tuesday 07 September 2004 14:06, you wrote:
> Hi.
> I have a database created with -E LATIN1. Inserting norwegian characters
> lik '=F8' works perfectly from JDBC, but from Perl, it stores the word
> 's=F8ker' as 'søker'(UNICODE).
>
> perl --version:
> This is perl, v5.8.3 built for i386-linux-thread-multi
> A Mandrake-10 Linux system.
>
> I first had the problem printing out LATIN1 chars to stdout too, but solv=
ed
> that by using the pragma
> use encoding 'ISO-8859-1';
>
> I've tried:
> $dbh->do("set CLIENT_ENCODING TO 'ISO-8859-1'")
> or die("Couldn't set encoding to ISO-8859-1");
> but that didn't work.
>
> Any hints anyone?

Replying to my self:

I fixed it by using the following:
use encoding 'ISO-8859-1';
use Unicode::MapUTF8 qw(to_utf8 from_utf8 utf8_supported_charset);

$tmp_text =3D from_utf8({ -string =3D> $plain_text, -charset =3D> 'ISO-8859=
-1' });
$retval =3D $insert_stmt->execute($tmp_text);

The problem was that the contents of $plain_text was obtained by some libra=
ry=20
which returned text in utf8. When printing it out to stdout, the 'use=20
encoding' pragma took care of the conversion, but that didn't work for=20
inserting the contents of $plain_text into the database. So I must convert =
it=20
to latin1 using the from_utf8 subroutine *before* inserting it into the DB.

--=20
Andreas Joseph Krogh
Senior Software Developer / Manager
gpg public_key: http://dev.officenet.no/~andreak/public_key.asc
------------------------+----------------------------------- ----------+
OfficeNet AS | Two tomatoes in a fridge. One tomato says |
Hoffsveien 17 | to the other, "It's cold in here, isn't it?"|
PO. Box 425 Sk=F8yen | The other tomato says, "F**king hell, |
0213 Oslo | a talking tomato!" |
NORWAY | |
Phone : +47 22 13 01 00 | |
Direct: +47 22 13 10 03 | |
Mobile: +47 909 56 963 | |
------------------------+----------------------------------- ----------+


--nextPart1276003.4p2BVEvn1k
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQBBPb1RUopImDh2gfQRApb8AJ9uVm9O2DCeqfdc2prNVns+q+LftACg kMNN
8XueV6eBmQZ/uGTekdnUH9Y=
=OknU
-----END PGP SIGNATURE-----

--nextPart1276003.4p2BVEvn1k--