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