utf8 data, il2 skript a Cz::Cstocs
Pavel Smerk
xsmerk na fi.muni.cz
Sobota Leden 6 08:29:36 MET 2007
On Thu, Jan 04, 2007 at 05:45:24PM +0100, Honza Pazdziora wrote:
> On Thu, Jan 04, 2007 at 12:43:55AM +0100, Pavel Smerk wrote:
> > A dale, jak se spravne rekne, ze mam data (vstupy/vystupy) v utf8, ale
> > skript v il2? Podle perluniintro jsem pouzil -CSD a use encoding 'latin2'.
> > Jenze pak se mi nedari pouzit Cz::Cstocs:
> >
> > $ perl -e 'use Cz::Cstocs "il2_ascii"; print il2_ascii("ěščřžýáíé"), "\n"'
> > escrzyaie
> > $ perl -e 'use encoding "latin2"; use Cz::Cstocs "il2_ascii"; print il2_ascii("ěščřžýáíé"), "\n"'
> > yaie
> > $
> >
> > Ja bych potreboval vysledek jako v prvnim pripade i pro use encoding
> > "latin2" (pokud teda se tak spravne rika, ze skript je v tomto kodovani).
> > Nebo to mam do ascii prekodovavat nejak jinak? Jak (z Encode::encode/from_to
> > jsem to nedokazal vyrazit)?
>
> Cz::cstocs jede v bajtové sémantice, nikoli ve znakové. Jakmile řekneš
> use encoding, implikuješ pro literální řetězce znakovou sémantiku.
>
> Používej všude UTF-8.
Chapu teda správně, že pro korektní práci s utf8 bych měl mít data i skript
v utf8, ve skriptu use utf8 a spouštět s -CSD? Pak mi totiž nebude fungovat
to Cz::Cstocs, asi že ty utf8 řetězce jsou interně reprezentovány nějak
jinak, nevím (dovnitř nevidím a manuál říká, že nemám chtít vidět ;-)
$ echo "ěščřžýáíé" | cstocs il2 utf8 | perl -ne 'BEGIN {use Cz::Cstocs "utf8_ascii"} print utf8_ascii $_'
escrzyaie
$ echo "ěščřžýáíé" | cstocs il2 utf8 | perl -CI -ne 'BEGIN {use Cz::Cstocs "utf8_ascii"} print utf8_ascii $_'
WidĹŞý acter in print at -e line 1, <> line 1.
Mám do ascii překódovávat nějak jinak? Encode::encode('ascii', $string) mi
ze znaků s diakritikou udělá otazníky, takže teď skrze Encode::encode kóduju
do il2 a z něj skrze Cz::cstocs teprve do ascii, ale počítám, že by to mohlo
jít i přímočařeji.
Díky, P.
Další informace o konferenci Perl