\w, use locale a use utf8

Honza Pazdziora adelton na fi.muni.cz
Pondìlí Srpen 22 12:46:28 MEST 2005


On Mon, Aug 22, 2005 at 11:54:25AM +0200, Jan Kasprzak wrote:
> 
> 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).

Buïto se pou¾ívá znaková charakteristika (-C, use utf8, atp.), nebo se
pou¾ívá bajtová, s volitelnou zmìnìnou sémantikou nìkterých bajtù pøi
operacích jako \w, lc, atp. Chtít -C -Mutf8 a zároveò -Mlocale nedává
smysl. -C a -Mutf8 _nemají_ s locales vùbec nic spoleèného.

Pár dal¹ích pøíkladù o tom, jak se to chová, najde¹ na

	http://www.fi.muni.cz/~adelton/perl/europen2004/tutorial.html#unicode

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