use utf8 gives me 'Wide character in print'

来源:互联网 发布:如何投诉淘宝商家客服 编辑:程序博客网 时间:2024/05/16 05:42
use utf8 gives me 'Wide character in print'如果我运行下面的程序  [oracle@oadb utf-8]$ perl -e 'use utf8; print "鸡\n";print length("鸡\n")."\n"'Wide character in print at -e line 1.鸡2我得到这个警告:Wide character in print at -e line 1.如果我运行 这个程序:[oracle@oadb utf-8]$ perl -e ' print "鸡\n";print length("鸡\n")."\n"'鸡4我不会得到警告:我认为 use utf8 是需要使用utf8 字符在一个Perl脚本,为什么这个不起作为 我该如何解决没有use utf8 解释你的脚本作为一个单字节字符顺序,那么这里有4个字节在你的字符串里[oracle@oadb utf-8]$ perl -E 'say join ":", map { ord } split //, "鸡\n";'233:184:161:10前3个字节组成了你的字符(鸡),最后一个是换行符这个调用打印发送那些4个字符到STDOUT, 你的控制台然后制定如何显示那些字符。如果你的控制台设置为UTF-8,那么它会解释那3个字节作为一个单独的字符如果 你增加use utf8,事情就不同了, 在这种情况下,Perl解释你的字符串作为2个字符[oracle@oadb utf-8]$  perl -Mutf8 -E 'say join ":", map { ord } split //, "鸡\n";'40481:10默认情况下,Perl的 IO layer 假设 它是和单字节字符一起工作。因此当你尝试打印一个多字节的字符, Perl 想 这里有什么错误 给你一定警告(S utf8)  Perl 遇到一个宽字符(>255) 当他没有想到的。这个警告是默认启用用于I/O(像print)最简单的方式减轻这个警告是简单的增加 utf8 layer 到输出例如 binmode STDOUT, ':utf8'. 另外一个方式是关闭警告 增加  no warnings 'utf8';

0 0