Zmateny perl z kodovani
Honza Pazdziora
adelton na fi.muni.cz
Středa Leden 19 16:03:47 MET 2005
On Wed, Jan 19, 2005 at 03:19:06PM +0100, Ondrej Koala Vacha wrote:
>
> A jak je to tedy ted, kdyz nacitam JPEG nebo gzip ze souboru?
> Sice uz jsem to dlouho nedelal, ale ted cekam, ze bych musel pouzit
> binmode v pripade opravdu binarnich dat. Naopak pokud pracuji s textovym
Ano, binmode ':bytes' nebo ':raw';
> souborem, tak cekam, ze muzu bez problemu delat zameny a nemusim se
> starat, jak to perl resi unitr. Tedy ze v mem pripade nacte data v latin2,
> prevede si je do interniho formatu a vrati/zapise opet jako latin2.
V zasade ano, ovsem s tim rozdilem, ze pri zapisu muze jit o uplne
jiny soubor a uplne jinou IO vrstvu.
> Tedy ze mohou nastat 2 moznosti: bud je vstupni kodovani definovane, a pak
> at si perl dela prevody jake chce; nebo neni a pak jsou to binarni data,
> ktera se nesmi jakkoli prevadet.
Ano. Ovsem je samozrejme otazka, co se ma stat, pokud se rozhodnete
spojit retezec s bajty s retezcem se znaky. V takome pripade evidentne
chcete jako vysledek jeden retezec, v jednom formatu.
> Zrovna u HTTP bych cekal, ze neco nactu, udelam par textovych zamen typu
> s/ +/ /og a nekam zapisu. Mam se zacit bat, ze to dopadne stejne neslavne
No, zalezi, co ocekavate. Ze kdyz dostanete objekt, ktery rika
v hlavickach, ze obsah je v ISO-8859-2, ze s tim obsahem budete moci
pracovat bez nejakeho usili jako se znaky v UTF-8? A co kdyz ta HTTP
odpoved bude v ISO-8859-2, ale s Content-Encoding gzip? Pak mate
binarni gzipova data ... a kdyz je rozzipujete, ocekavate, ze magicky
se jeste navic prevedou z ISO-8859-2 do UTF-8? Kdyz tak informace
o te znakove sade je nekde uplne jinde? Ja za sebe bych tedy dost
nechtel, aby se mi bajty morfovaly pod rukama.
> jako pri cteni dat z DBI/DBD?
V zasade -- od te doby, co jsem se vykaslal na ISO-8859-2 a na hratky
s tim, ze cim vice znakovych sad clovek ovlada, tim vickrat je
clovekem, a pracuji v UTF-8, je jak prace se soubory, tak s XML, DBI
a webem je vyrazne snazsi.
> Nevim; po pouziti use encoding 'iso-8859-2' si myslim, ze perlu rikam, ze
> vstupy jsou v latin2, binarni si musim explicitne osetrit jinak. Ted se mi
Ne vstupy, ale STDIN. man encoding hovori pouzei o STDIN a STDOUT. To
je dost rozdil oproti predpokladu, ze najednou se ze vsech externich
dat stanou korektni UTF-8 retezce.
> zda, ze u kazdeho zdroje dat (DBI,HTTP,FTP, soket...) si clovek bude muset
> pamatovat, jak je perl vlastne nacetl, tedy jestli si si o nich opravnene mysli, ze jsou v jeho internim
> formatu.
No hlavne u kazdeho toho zdroje dat jste to Vy a nebo nejaky priznak
v tom protokolu, ktery vi, v jakem kodovani ten vstup je. Vy si muzete
rict use encoding 'iso-8859-2' a ja na Vas HTTP::Request odpovim
s Content-Type: Windows-1250. Evidentne neni zadouci, aby Vase use
encoding tento vstup dat jakkoli ovlivnovalo. Co by samozrejme
HTTP::Response mohlo delat, by byla moznost vysosnout si ta data
v UTF-8, pokud jsou text/*, tedy ze by HTTP::Response nebo nekdo
takovy tu konverzi provedl, pokud by byla nutna. Ale to je zcela
stejne jako nutnost udelat to v DBD.
--
------------------------------------------------------------------------
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