以后,perl 会转完全移到字符意义上的处理来,但是现在,为了保证兼容以前老的 perl 程序,让这个能平滑过度,所以设计了这样一个机制来让用户决定使用字符还是字节方式来操作 其实这个机制很好理解,只要你理解了字节和字符的区别就OK了,更多时候你根本无须关心这些编码方面的问题。 perl 在对国际化的支持方面是做得不错的,我觉得这个没啥不可思议的呵呵,编码本来就是这么回事。
2009/8/31 OoOoO xu <[email protected]> > 没人认为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 访问该论坛 -~----------~----~----~----~------~----~------~--~---
