Wide character in print 报错
用perl写文本处理程序,或者写服务器端脚本的时候, 常常会遇到“Wide character in print” 的警告或者错误。 这是因为在程序中处理中文等宽字符时,perl不能识别要处理的内容。 首先要知道perl只能处理两种编码: ascii码; utf-8码; ascii码是很少的,像中文、日文、韩文等字符要想能被perl处理,只能用 utf-8编码方式。 perl就会把那个字符串当做utf-8编码的字符来处理; 如果是0,perl就不能认知字符串中除了 ascii码之外的字符, 这个时候,就会报出“Wide character in print”的警告或者错误。 举个例子,你要在程序中处理‘当历史成为历史’这个字符串, 如果你的程序文件是utf-8编码的话,一般情况下直接处理就行了,因为这时字符串的utf8-flag是打开的。 如果你的程序文件是gb2312的话,那么你就需要把那个字符串的utf8-flag打开。 但是,一般还会有这样 的问题,因为这个字符串是gb2312编码的, 所以你要做两件事情: 将字符串的编码转为utf-8和打开utf8-flag,如下代码所示: use Encode; use strict; my $str = "当历史成为历史"; Encode::_utf8_on($str); print $str. ""; Encode::_utf8_off($str); print $str. ""; 将上面的这段程序存到文件里,第二个print就会报错: Wide character in print at test.pl line 6。 这就是因为utf8-flag被关闭,perl不能识别字符串。 当然,在每个处理宽字符的地方加上Encode::_utf8_on函数确实是个解决办法。 但是一般来说,在每个地方都加上这样的函数,既在编写程序的时候麻烦,维护的时候更麻烦。 这里还有一个更好的办法, 在程序文件的头部加上以下内容: use utf8; binmode(STDIN, ':encoding(utf8)'); binmode(STDOUT, ':encoding(utf8)'); binmode(STDERR, ':encoding(utf8)');
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。