没人认为perl的这种utf8 flag机制让人很迷糊么
$a=\x{4567}认为utf8 flag on,  而且 is_utf8,但直接打印到终端会出现如wide
character这样的warning,仍然需要使用
encode('uft8',$a)编码一次。decode得到的字符串也是认为utf8 flag on
倒是直接认为\x{....}这种方式为perl的内部编码,处理方式为unicode而不管什么utf8
flag的时候可以更好理解。一想到内部为utf8然后仍然需要编码就感觉不可思议。



2009/8/27 cnhack TNT <[email protected]>

> utf8 flag on 的意思是,这个字符串将被作为一个个的 unicode 字符来对待,utf8 flag off 的意思是,这个字符串对
> perl 来说无语义,只是一堆字节流,perl 对它的操作会是针对字节的。
> \x{4567} 的形式是 unicode 字符的形式,所以它对 perl 来说是具有语义的一个字符,untf8 flag 默认是 on。
> 像 substr 这种函数,也是根据 utf8 flag 来决定怎么样对字符操作(on 就是按字符,off 就是按字节)。
>
> 可参看:
> http://search.cpan.org/~dapm/perl-5.10.1/pod/perlunicode.pod<http://search.cpan.org/%7Edapm/perl-5.10.1/pod/perlunicode.pod>
> http://search.cpan.org/~dapm/perl-5.10.1/pod/perluniintro.pod<http://search.cpan.org/%7Edapm/perl-5.10.1/pod/perluniintro.pod>
>
> 2009/8/23 point <[email protected]>
>
> use Encode;
>> my $str='\x{4567}";
>> print "utf8 flag on" if Encode::is_utf8($str);
>>
>> 将打印 "utf8 flag on"
>>
>> 为什么这种形式的字符串默认打开了 utf8 flag ?
>>
>>
>> Perl的内部存储格式为utf8,这点的\x{4567}为unicode码,是不是遇到这种格式的字符串就默认已经转换为了utf8格式,并打开了
>> utf8 flag ?
>>
>>
>
> >
>


-- 
Woosley.Xu
Tju->PMO->Rdps

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。
 要在此论坛发帖,请发电子邮件到 [email protected]
 要退订此论坛,请发邮件至 [email protected]
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

回复