• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

理解perl的编码转换——utf8以及乱码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

工作需要,闲暇之余,仔细研究了一下脚本乱码的问题

1. vim新建的文件

1)在linux命令行 vim命令建立的文件,如果内容中不出现中文,默认是ASCII。那么用notepad++打开的时候,就是“以ASC格式编码”。如下面的: 99.txt
2) 如果vim在建立文件的时候,故意在文件中插入中文(我的secureCRT是utf8的),此时文件内容不会乱码,而且vim保存文件后,再用vim打开也会看到中文,没有乱码。我猜测应该是Linux碰到中文,自动就转换成文档应该用utf8而不是asc保存了。如下图的: 88.txt

 

2. notepad++编辑不含中文汉字的ASC文件,增加汉字内容后的变化。如下图:

可以看到: 在99.txt中增加汉字后,文档变成了ISO-8859格式!以前全部是字母数字的内容。虽然增加了汉字,然后用notepad++打开不乱码,可是使用vim打开 有汉字的99.txt,那么汉字就显示乱码

 

3.  如果是可执行脚本程序文件,一个是ASC(iso-8859在这里也成为asc)的,如下:pp.pl ; 另一个是utf8的,如下:ss.pl 。他们两个都有输出汉字内容的"print" 语句!结果如下:

结论:可执行脚本文件 产生 的标准输出 内容,与源文件的编码方式有关。输出内容的编码和源脚本的编码相同!由于pp.pl是iso-8859,所以只需它输出的 f1 也是同样的格式!

 

4. 下面举例解决编码转换的问题,只讨论 pp.pl文件。
如果我想pp.pl 文件的输出是 utf8 ,而且在终端上是可以看到输出的中文字符,那么代码如下:

#!/usr/bin/perl -w
use Encode;

$str = "吴俊杰1";
#$str = encode("utf-8",decode("GB2312",$str));
$str = encode("utf-8",decode("ISO-8859-1",$str));
print $str;
print "\n";

下面是代码执行结果:

从上图可以看出,对于有汉字的时候,应该用 GB2312 转 utf8 。虽然文件字符串是 ISO-8859的,可是ISO-8859字符集里面没有 那些中文字符,所以转换后打印是乱码,所以要用包含iso-8859字符编码的GBK或者GB2312来转换就可以了。我的理解是:GBK应该包含了iso-8859的所有吧!

 

5. 下面引出 perl中字符编码的转换:
摘自: http://blog.sina.com.cn/s/blog_477759e701010198.html

use Encode;


gbk转uft-8:
$line = encode("utf-8",decode("gbk",$line));

$line = encode_utf8(decode("gbk",$line));
utf-8转gbk:
$line = encode("gbk", decode("utf8", $line));
uft-8转gb2312:
$line = encode("gb2312", decode("utf8", $line));

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Genesis不能运行Perl编译后的脚本发布时间:2022-07-22
下一篇:
perl5:模拟SWITCH语句发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap