Wide character in print报错
2011-06-08 17:47
369 查看
用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. "\n";
Encode::_utf8_off($str);
print $str. "\n";
将上面的这段程序存到文件里,试图运行的时候就会报错: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)');
这是因为在程序中处理中文等宽字符时,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. "\n";
Encode::_utf8_off($str);
print $str. "\n";
将上面的这段程序存到文件里,试图运行的时候就会报错: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)');
相关文章推荐
- [perl]Wide character in print
- perl unload utf-8 oracle Wide character in print at unload_oracle.pl line 105.
- perl unload utf-8 oracle Wide character in print at unload_oracle.pl line 105.
- Wide character in print at check_cert.pl line 18.
- Perl Wide character in print问题解决
- Wide character in print at hcp.pl line 21.
- use utf8 gives me 'Wide character in print'
- Wide character in print at ../lib/MonWalkProc.pm line 569.
- Wide character in print at hcp.pl line 21.
- 【 Perl 】三种方式解决” Wide character in print “
- php 返回json 解析 报Wide character in print
- Wide character in print at hcp.pl line 21.
- php 返回json 解析 报Wide character in print
- Wide character in print 报错
- Wide character in perl
- Invalid character found in method name. HTTP method names must be tokens
- [C/CPP系列知识] Type difference of character literals 和 bool in C and C++
- Leetcode First Unique Character in a String
- leetcode-387-First Unique Character in a String
- The filename 未命名.ipa in the package contains an invalid character(s).