Windows perl处理中文

七月 29, 2014

最近在提分网做了一段时间的兼职,工作主要是试题校对,经常需要进行文本替换操作,纯手工操作特别麻烦,于是我就想到是否可以借助 Perl 的正则表达式功能来进行替换。但是以前工作中仅用 Perl 处理过纯英文的字符串,现在要面临的是中文字符串,或者中英文以及数学公式、标点符号混合字符串,而且还是在 Windows 平台上,Perl 能否胜任?

通常,最初测试 Perl 是否正常运行的语句是:

print "Hello, world\n";

那么,如果要测试它打印中文字符串,可以尝试:

print "你好!\n";


通常,在现代 Linux 发行版上,终端运行这个脚本都能得到正确的结果,但是在 Windows 平台上就不行了,终端运行得到的是一堆乱码(我用的是 Win7,不知道最新的 Win8 是否有改进)。于是,几年前我刚开始学 Perl 时就认为 Perl 处理中文能力不行,至少在 Windows 平台上不行。

其实问题不在于 Perl 本身,而在于 Windows 终端的字符编码有问题,解决方案也是非常玄妙:我们为什么要把字符串打印在终端上呢?事实上终端上的结果既不方便查看又不方便复制和保存,它充其量只是一个运行程序的媒介而已。我们何不使用 Shell 的重定向功能把结果输出到文件里呢?就像这样:

perl program.pl >output.dat

注意像部分常用的Linux shell 重定向功能在 Windows 上也是通用的。打开结果文件 output.dat,结果完全正确!看来,Windows 平台上的 Perl 也是能完美地处理中文的!唯一值得注意的是:不推荐用 Windows 自带的记事本去打开文件,最好使用专业的文本编辑器(如 Ultraedit),在文本编辑器上设置默认创建的文件类型为 UTF-8 编码,采用 UNIX 换行格式。

Perl 的正则表达式功能如“查找”、“替换”对于中文字符串也同样适用。例如:把所有的英文逗号“,”替换成中文逗号“,”:

s/,/,/g;

或者反过来:把所有的中文逗号“,”替换成英文逗号“,”:

s/,/,/g;

总而言之,只要把结果打印到UTF-8编码的纯文本文件里,不管在哪个平台都能正常工作。

posted in Perl by billzt

Follow comments via the RSS Feed | Leave a comment | Trackback URL

说点什么

4 评论 在 "Windows perl处理中文"

提醒
排序:   最新 | 最旧 | 得票最多
游客

win7命令行字符集似乎是utf8。

我用的linux,倒还方便。反正数据文件,脚本,命令行全用UTF8
http://blog.shenwei.me/match-chinese-character-regular-expression/

游客

@Wei Shen, 但是在win7终端上还是无法运行出结果的

游客

你好,能把这个的主题共享下吗?我一直用的是这个主题,但是前些时间换空间忘记备份了,网上也找不到下载的了。
谢谢!
1316855538@qq.com

游客

@iRong, http://code.openark.org/blog/

貌似现在已经更新过了

 

Copyright © 2010-2017 | Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org