Portál AbcLinuxu, 27. dubna 2024 06:15


Dotaz: Perl a nefungující locales v RE

24.10.2006 10:41 Dunric | skóre: 21
Perl a nefungující locales v RE
Přečteno: 73×
Odpovědět | Admin
Zdravím.

Prvně potřebuju v perlu parsovat český text a hned narazím ;-)

use locale;

my $row = <>;
chomp($row);
$row =~ s/(\w)/$1_/g;
print $row;

Po zpracování řetězce "příliš žluťoučký kůň" regulárním výrazem je v $row "p_říl_i_š žl_u_ťo_u_čk_ý k_ůň" místo očekávaného "p_ř_í_l_i_š ž_l_u_ť_o_u_č_k_ý k_ů_ň". Zřejmě národní znaky nepočítá mezi alfanumerické.

Perl 5.8.8, locales IMHO správně nastaveny na cs_CZ.UTF-8 (vč. LC_CTYPE). Zkoušel jsem i pragmu use utf8, ale bezvýsledně.

In the garden sleeps a messenger ·
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.10.2006 10:47 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Perl a nefungující locales v RE
Odpovědět | | Sbalit | Link | Blokovat | Admin
ehm, samozřejmě místo očekávaného "p_ř_í_l_i_š_ ž_l_u_ť_o_u_č_k_ý_ k_ů_ň_"
In the garden sleeps a messenger ·
24.10.2006 11:07 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Perl a nefungující locales v RE
use utf8;

...

$row =~ s/(\p{L})/$1_/g;
24.10.2006 11:59 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Perl a nefungující locales v RE
Díky.

Zkoušel jsem to, ale aby to skutečně pracovalo s unicode znaky, musel jsem nastavit ovladač vstupu do utf8 "modu" voláním funkce binmode. Je to tak nutné dělat nebo jsem něco přehlédl ?

In the garden sleeps a messenger ·
24.10.2006 12:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Perl a nefungující locales v RE
skúste sa pozrieť na pragmu encoding, napr
use encoding 'utf-8';
24.10.2006 14:10 Dunric | skóre: 21
Rozbalit Rozbalit vše Re: Perl a nefungující locales v RE
Jj, to bude ono. Ještě jednou dík.
In the garden sleeps a messenger ·

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.