理解perl的编码转换——utf8以及乱码
工作需要,闲暇之余,仔细研究了一下脚本乱码的问题
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));
理解perl的编码转换——utf8以及乱码的更多相关文章
- discuz编码转换UTF8与GBK互转完美适合Discuz3.x系列
由于一些网站通信编码的问题不得不把一直使用的网站编码由UTF8转为GBK,在转换过程中在官方看了很多方法,自己也都尝试了一些最后都没有能够成功,数据库的转换一直都是没有大问题,不存在丢失什么的,能看到 ...
- Linux字符编码转换 UTF8转GB3212
在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码. 一.利用iconv函数族进行编 ...
- C# 编码转换 UTF8转GB2312 GB2312转UTF8
/// <summary> /// GB2312转换成UTF8 /// </summary> /// <param name="text">&l ...
- 字符编码之间的转换 utf-8 , gbk等,(解决中文字符串乱码)
目录 1.背景. 2.编码的理解 3.编码之间的相互转化 4. str类型说明 5. 可以使用的编码类型 6.参考文章 1.背景 Python中与其他程序进行交互时,如果存在字符串交互,特别是字符串中 ...
- ASP 编码转换(乱码问题解决)
ASP 编码转换(乱码问题解决) 输出前先调用Conversion函数进行编码转换,可以解决乱码问题. 注,“&参数&”为ASP的连接符,这里面很多是直接调用的数据库表字段,实际使用请 ...
- PHP转换UTF-8和GB2312的URL编码(转)
目前WEB的应用中, UTF-8编码和GB2312编码是并存在的,例如百度(baidu.com)和谷歌(google.com)的URL编码分别是GB2312编码和UTF-8编码.由于编码并存引起的乱码 ...
- Mac下用命令行直接批量转换文本编码到UTF8
由于近期在Mac下写Android程序,下载的一些Demo由于编码问题源码里的汉字出现乱码,文件比较多,所以想批量解决下文件的编码问题. Mac下有以下两种方式可以解决: A. 文件名的编码:Mac的 ...
- 解决Linux文档显示中文乱码问题以及编码转换
解决Linux文档显示中文乱码问题以及编码转换 解决Linux文档显示中文乱码问题以及编码转换 使vi支持GBK编码 由于Windows下默认编码是GBK,而linux下的默认编码是UTF-8,所以打 ...
- 浏览器正确理解和使用GBK及UTF-8(UTF-8 + BOM)网页编码
网页编码英文译为web page encoding.是在网页中指定其特定的字符编码格式的库. GBK是国家标准GB2312基础上扩容后兼容GB2312的标准. GBK的文字编码是用双字节来表示的.即不 ...
随机推荐
- JS的Document属性和方法小结
Document想必大家并不陌生吧,在使用js的过程中会经常遇到它,那么它有哪些属性.哪些方法,在本文将以示例为大家详细介绍下,希望对大家有所帮助 document.title //设置文档标题等价于 ...
- noip2014普及组——珠心算测验
题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠 ...
- TKinter的常用组件
python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.T ...
- ajax方法完整的事件流
- asp.net MVC ViewData详解
转自:http://www.cnblogs.com/gaopin/archive/2012/11/13/2767515.html 控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 ...
- 基于spring-boot的web应用,ckeditor上传文件图片文件
说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...
- [转]UOS 中的虚拟网络设备
随着网络技术,虚拟化技术的发展,越来越多的高级网络设备被加入了到了 Linux 中,这些设备在 UOS 中起到了广泛而关键的作用,包括 Open vSwitch.TAP 设备.Veth 设备等等,梳理 ...
- LeetCode "Count of Smaller Number After Self"
Almost identical to LintCode "Count of Smaller Number before Self". Corner case needs to b ...
- Spring实战6:利用Spring和JDBC访问数据库
主要内容 定义Spring的数据访问支持 配置数据库资源 使用Spring提供的JDBC模板 写在前面:经过上一篇文章的学习,我们掌握了如何写web应用的控制器层,不过由于只定义了SpitterRep ...
- 几个关于wcf、rest服务的好帖子
//http://blog.csdn.net/fangxing80/article/details/6247297 //http://msdn.microsoft.com/zh-cn/magazin ...