博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[perl]Wide character in print报错
阅读量:6325 次
发布时间:2019-06-22

本文共 1103 字,大约阅读时间需要 3 分钟。

hot3.png

用perl写文本处理程序,或者写服务器端脚本的时候,常常会遇到“Wide character in print” 的<p>警告或者错误。<p> 这是因为在程序中处理中文等宽字符时,perl不能识别要处理的内容。<p> 首先要知道perl只能处理两种编码:ascii码和utf-8。ascii码是很少的,像中文、日文、韩文等字符<p>要想能被perl处理,只能用 utf-8编码方式。字符串在perl内部的存储格式如下图:<p>

当flag是1的时候,perl就会把那个字符串当做utf-8编码的字符来处理;如果是0,perl就不能认知字<p>符串中除了 ascii码之外的字符,这个时候,就会报出“Wide character in print”的警告或者<p>错误。<p> 举个例子,你要程序中处理‘当历史成为历史’这个字符串,如果你的程序文件是utf-8编码的话,<p>一般情况下直接处理就行了,因为这 时字符串的utf8-flag是打开的。如果你的程序文件是<p>gb2312的话,那么你就需要把那个字符串的utf8-flag打开。但是,一般还会有这样 的问题,<p>因为这个字符串是gb2312编码的,所以你要做两件事情:将字符串的编码转为utf-8和打开<p>utf8-flag。<p> use Encode;<p> use strict;<p> my $str = "当历史成为历史";<p> Encode::_utf8_on($str);<p> print $str. "\n";<p> Encode::_utf8_off($str);<p> print $str. "\n";<p> 将上面的这段程序存到文件里,试图运行的时候就会报错:Wide character in print at test.pl line <p>6。这就是因为utf8-flag被关闭,perl不能识别字符串。<p> 当然,在每个处理宽字符的地方加上Encode::_utf8_on函数确实是个解决办法。但是一般来说,在<p>每个地方都加上这样的函 数,既在编写程序的时候麻烦,维护的时候更麻烦。<p> 这里还有一个更好的办法:在程序文件的头部加上以下内容<p> use utf8;<p> binmode(STDIN, ':encoding(utf8)');<p> binmode(STDOUT, ':encoding(utf8)');<p> binmode(STDERR, ':encoding(utf8)');<p>

转载于:https://my.oschina.net/pkjason/blog/125079

你可能感兴趣的文章
[hadoop源码阅读][5]-counter的使用和默认counter的含义
查看>>
SAP HUM 如何对一个HU做上架?
查看>>
LINUX系统中动态链接库的创建与使用{补充}
查看>>
三维视觉国际会议首度在中国举办
查看>>
达索系统入手XFlow开发商 强化3DEXPERIENCE平台的仿真能力
查看>>
Loadrunner 性能测试服务器监控指标
查看>>
自动化运维工具之ansible
查看>>
memcached的安装
查看>>
freebsd系统安装
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Linux LTP 测试框架
查看>>
log4j 每次运行生成文件
查看>>
“经常加班”有误区
查看>>
jquery各种事件触发实例
查看>>
我的友情链接
查看>>
MY TroubleShooting
查看>>
Linux 常用目录管理命令(cd pwd mkdir rmdir)
查看>>
java程序员菜鸟进阶(四)oracle基础详解(四)oracle开启和关闭服务程序——解决安装oracle占用大量内存...
查看>>
Flask_学习笔记_09: Flask中的继承
查看>>