Problem with LATIN1 characters from Perl-DBI
--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
'=F8' works perfectly from JDBC, but from Perl, it stores the word 's=F8ker=
' as
's=C3=B8ker'(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=
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?
--
Andreas Joseph Krogh <andreak [at] officenet.no>
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
--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=C3=B8ker'(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
which returned text in utf8. When printing it out to stdout, the 'use
encoding' pragma took care of the conversion, but that didn't work for
inserting the contents of $plain_text into the database. So I must convert =
it
to latin1 using the from_utf8 subroutine *before* inserting it into the DB.
--
Andreas Joseph Krogh <andreak [at] officenet.no>
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--