utf8::is_utf8()?
Jan Kasprzak
kas na fi.muni.cz
Úterý Duben 8 17:00:47 CEST 2008
Dobry den,
potreboval bych nekde hluboko v aplikaci vedet, jestli mam znakova nebo
bajtova data, a u znakovych provedl encode('utf-8', $data). Problem je,
ze se to nejak nechova jak ma. Mam snahu delat ladici vypis takto:
open my $log, ">/tmp/log";
print $log utf8::is_utf8($data) ? "je" : "neni", " utf-8\n",
utf8::valid($data) ? "je" : "neni", " validni\n";
print $log Dumper $data;
tak dostanu ze je utf-8 a je validni, ale v /tmp/log mam
$VAR1 = "... \x{c4}\x{9b}\x{c5}\x{a1}\x{c4}\x{8d}\x{c5}\x{99} ...";
z cehoz usuzuju, ze ta data jsou sice kodovana v UTF-8, ale z hlediska
Perlu to jsou bajty (jinak by tam bylo \x{trojmistne cislo} misto dvou
\x{dvojmistne cislo}), takze by utf8::is_utf8() nemelo vracet pravdivou
hodnotu. Kdyz si ale vypichnu jen tuhle cast skriptu - neco jako
====================================================================
#!/usr/bin/perl -w
use strict;
use utf8;
use Data::Dumper;
my $data = "... \x{c4}\x{9b}\x{c5}\x{a1}\x{c4}\x{8d}\x{c5}\x{99} ...";
open my $log, ">/tmp/log";
print $log utf8::is_utf8($data) ? "je" : "neni", " utf-8\n",
utf8::valid($data) ? "je" : "neni", " validni\n";
print $log Dumper $data;
====================================================================
tak dostavam to co ocekavam, tedy ze "neni utf-8", "je validni" a pak
$VAR1 = '... ěščř ...';
cili ta data jako bajty a ne escape sekvence \x{dvojciferne cislo}.
Moje dotazy jsou:
- podle ceho Data::Dumper pozna, ze ma psat primo bajt a ne \x{cislo} ?
- jak muze vzniknout promenna ktera splnuje utf8::is_utf8(), ale pritom
obsahuje \x{dvojciferne cislo vetsi nez 7f} ?
Ta data mi vznikaji pres MIME::Entity->as_string, takze mozna
ma MIME::Entity nejakou binarni cast v XS, ktera nefunguje uplne dobre
s UTF-8 daty (?).
Diky za jakykoli tip.
-Yenya
--
| 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/ Journal: http://www.fi.muni.cz/~kas/blog/ |
>> If you find yourself arguing with Alan Cox, you’re _probably_ wrong. <<
>> --James Morris in "How and Why You Should Become a Kernel Hacker" <<
Další informace o konferenci Perl