UTF8, DBD::mysql a binarni data

Honza Pazdziora adelton na fi.muni.cz
Sobota Duben 16 18:14:43 MEST 2005


On Fri, Apr 15, 2005 at 06:35:15PM +0200, Jan Kasprzak wrote:
> 
> 	mam data v MySQL v kodovani ISO 8859-2 a chtel bych je zpracovavat
> v UTF-8. $sth->fetchrow_arrayref mi vraci nejaka binarni data, ovsem
> 
> Encode::decode('iso-8859-2', $ref->[0])
> 
> mi nadava ze 
> 
> Wide character in subroutine entry at /usr/lib64/perl5/5.8.5/x86_64-linux-thread-multi/Encode.pm line 164.
> 
> a ted nevim jak mu vysvetlit, ze na $ref->[0] ma pohlizet jako na binarni
> data a ne na (nekorektni) UTF-8 retezec.

Tohle je divne. Znamena to, ze DBD::mysql vrati ten retezec
s nastavenym UTF-8 flagem, i kdyz to neni UTF-8 retezec? Nejdriv si 
musime ujasnit, co vlastne za data mame. Co na tom rika

	printf map { "%x ", ord $_ } split //, $ref->[0]

nebo ekvivalent?

Pokud ten flag chces vypnout (aby to byl echt binarni retezec), tak 
utf8::downgrade. Kdyz ale zkusim provest ten Encode::decode dvakrat, 
tak dostanu hlasku

	Cannot decode string with wide characters at /usr/.../Encode.pm line 164.

ne Wide character ...

Jeste takovy napad -- deje se to, i kdyz bys ta data vytahl pomoci 
fetchrow_array?

> $ref->[0] = pack("C*", unpack("C*", $ref->[0]));
> 
> Existuje neco elegantnejsiho? Diky,

Pokud jde o encodingy a UTF-8, mel by stacit repertoir z Encode
a utf8.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Perl