Zmateny perl z kodovani

Honza Pazdziora adelton na fi.muni.cz
Středa Leden 19 11:04:04 MET 2005


On Wed, Jan 19, 2005 at 10:51:57AM +0100, Ondrej Koala Vacha wrote:
> 
> A ted: nactu z pomoci DBI z databaze nejake udaje v iso-8859-2, bez 
> problemu jdou vytisknout. Potiz nastane, jak nad nimi provedu nejakou 

:-) No, bez problemu, pokud nemate use warnings, protoze to IMO budou
byty a Vy byste z nich potreboval udelat znaky (aby Vam z nich PerlIO
encoding mohl zpatky udelat byty).

> Chapu, ze je to predevsim problem DBI a jeho zrejme zvlastniho zpusobu 
> cinnosti, ale neexistuje nejaka funkce, ktera toto elegantne resi? Zatim 
> to delam pomerne slozite, tedy:
> 
> $a =  Encode::decode('iso-8859-2',$a); # prevadim do perl internal format
> $a = s/ +/ /og;
> $a =  Encode::encode('iso-8859-2',$a); # prevadim zpet do iso-8859-2, i 

Ne, nemelo by byt potreba delat zpet ten encode. Vy chcete z bytu od
DBI dostat znaky (tedy UTF-8, ale nas nezajima, ze to je UTF-8) a pak
uz pracovat pouhopouze se znaky, a nechat na encodingu navesenem na
filehandlech, aby ty znaky pak prislusne prevedly.

DBD pro nektere databaze (Oracle, PostgreSQL) umi v pripade, ze
kodovani klienta databazoveho spojeni je UTF-8, vratit retezcova data
jiz decodovana do znaku, takze tam to pak funguje transparentne. Pokud
Vam databaze vraci ISO-8859-2 (a nejde ji presvedcit, aby vracela
UTF-8 (bez ohledu na to, ze data jsou ulozena v cemkoli)), je ten
rucni decode asi jedina cesta.

-- 
------------------------------------------------------------------------
 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