\w, use locale a use utf8

Jan Kasprzak kas na fi.muni.cz
Pondìlí Srpen 22 11:54:25 MEST 2005


	Rozumite nekdo nasledujicimu chovani?


Pisu v ISO-8859-2 vstupni text i locale:

$ LC_ALL=cs_CZ.ISO-8859-2 perl -Mlocale -e '$_="aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾"; s/\W/-/g; print $_, "\n"'
aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾

To jsem ocekaval. Ted totez na UTF-8 systemu:

$ LC_ALL=en_US.UTF-8 perl -Mlocale -e '$_="aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾"; s/\W/-/g; print $_, "\n"'
a--bc--d--e----fghi--jklmn--o--pqr--s--t--u----vwxy--z--

Znaky mimo ascii jsou rozpoznany jako dvojice bajtu, coz je asi pochopitelne.
Zkusim teda doplnit -C kvuli vicebajtovemu vystupu a -Mutf8 kvuli zdrojovemu
textu v UTF-8:

$ LC_ALL=en_US.UTF-8 perl -C -Mutf8 -Mlocale -e '$_="aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾"; s/\W/-/g; print $_, "\n"'
a-bcèdïeì-fghi-jklmnòo-pqrøs¹t»u-ùvwxy-z¾

Pismena s carkou nejsou povazovana za pismena. Zkusim odstranit -Mlocale:

$ LC_ALL=en_US.UTF-8 perl -C -Mutf8 -e '$_="aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾"; s/\W/-/g; print $_, "\n"'
aábcèdïeìéfghiíjklmnòoópqrøs¹t»uúùvwxyýz¾

A najednou je vsechno OK. Tusite nekdo, kde je problem? Ja bych rekl
ze nekde v Linuxovych locales (chova se takto Fedora 2, Fedora 4,
SUSE SLES 9, ale nikoliv FreeBSD 5.4).

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/   Czech Linux Homepage: http://www.linux.cz/ |
>>> $ cd my-kernel-tree-2.6                                              <<<
>>> $ dotest /path/to/mbox  # yes, Linus has no taste in naming scripts  <<<


Dal¹í informace o konferenci Perl