理解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的文字编码是用双字节来表示的.即不 ...
随机推荐
- linux下恢复误删除的文件方法(ext2及ext3)
linux下恢复误删除的文件方法(ext2及ext3) 2009-12-19 15:23:47 分类: LINUX 如果是ext2文件系统的,直接用debugfs是可以恢复出来的,但对于ext3,d ...
- linux服务之snmp
背景信息 http://datatracker.ietf.org/doc/rfc1213/ http://oid-info.com/get/1.3.6.1 http://oid-info.com/ge ...
- Openjudge计算概论-奇数单增序列
/*===================================== 奇数单增序列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列 ...
- PostgreSQL数据的导出导入
PostgreSQL数据的导出导入 导出PostgreSQL数据库中的数据: $ pg_dump -U postgres -f mydatabase.sql mydatabase 导入数据时首先创 ...
- Dom之标签增删操作
dom操作:THML新增子标签 a标签(appendChild) <!DOCTYPE html><html lang="en"><head> & ...
- Python教程:[69]strip()函数详解
strip()用于裁剪字符串首尾的某些字符,是一个用处非常多的函数,今天我们来通过例子来探讨一下它的基本用法: 假如有一个这样的字符串 strip()不带任何参数,可以删除首位的空格 但是strip( ...
- Hadoop 源码编译导出
https://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/BUILDING.txt http://www.src ...
- Asianux3配置yum
把下面四个文件放到/etc/yum.repos.d目录下 dag.repo: [dag] name=Dag RPM Repository for RHEL5 baseurl=http://mirror ...
- ajax两种不同方式的不同结果
function upLoadAlterData(){ $("#form_main").ajaxSubmit({ url:"XX", cache:false, ...
- NET 2.0 OCR文字识别技术(Tesseract 引擎)[转]
一.OCR简介 参见http://baike.baidu.com/view/17761.htm?fr=ala0_1 大家参照,我第一次也是这么了解的,呵呵.高手见笑 现在市面上好多OCR 引擎,不 ...