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. "\n";
Encode::_utf8_off($str);
print $str. "\n";

将上面的这段程序存到文件里,第二个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)');
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值