理解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的文字编码是用双字节来表示的.即不 ...
随机推荐
- Eclipse 复制按钮卡死
复制按钮和按住CTRL链着超链接 有冲突,Eclipse不知道是复制还是链到元素,所以卡死 Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法 最近在MyEclipse中编辑代码时,使用 ...
- nginx 偶发 403原因
观察errorlog 日志 是否存在类似错误 [error] 12788#0: *322 connection is denied by policyframe[return code:8], 观察是 ...
- linq 和 , 并 , 差 ,交
假如: A = [--.], B = [-.] A 并 B = 全部 linq : a.union(b) A 交 B = 中间那块 linq: a.Intersect(b) ...
- Nginx 499错误的原因及解决方法
今天进行系统维护,发现了大量的499错误, 499错误 ngx_string(ngx_http_error_495_page), /* 495, https certificate error */n ...
- Oracle内存参数配置及版本问题
Oracle的内存配置与Oracle性能息息相关.从总体上讲,可以分为两大块:共享部分(主要是SGA)和进程独享部分(主要是PGA).在 32 位操作系统下 的Oracle版本,不时有项目反馈关于内存 ...
- BI案例:某通信企业综合报表和决策分析系统实施案例
业务需求 某家位列国内五大电信运营商之列的通信公司(以下简称“通信公司”)在多年的运营过程中,积累了大量的业务数据,分散在各个运营系统中(计费系统.九七工程.网管系统等).这些系统主要是面向公司的日常 ...
- php没有开启Memcache扩展类时
模拟PHP Memcache 类.当服务器没有开启Memcache扩展的时候.可以采用本类使用方法class_exists('Memcache') or include './Memcache.cla ...
- FreeDroid开发过程中遇到的一些问题
http://bestzp.com/?p=83 Android Studio混淆: build.gradle中 1 2 3 4 5 6 buildTypes { release { ...
- 单选按钮选中js的处理
function FinancialinfosetController($scope, $http, $timeout, $location, $rootScope, $routeParams) { ...
- Swift与OC之间的选择
1.稳定性 在Swift2.0出来的时候,1.0的代码基本上改了个遍. 2.必要性 目前app store上大概有100w个是oc写的,如果是单纯的爱好,可以学习Swift,如果从事职业开发,那么还是 ...