zoukankan      html  css  js  c++  java
  • 理解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 " ";

    下面是代码执行结果:

    从上图可以看出,对于有汉字的时候,应该用 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));

  • 相关阅读:
    AFNetworking
    Alpha、Beta、RC、GA版本的区别
    Cocoa的MVC架构分析
    Core Graphics 和Quartz 2D的区别
    Linux基础--03--磁盘分区、挂载
    Linux基础--02--top、free and ps
    linux基础-01-用户和目录、vim、归档和解压、系统启动流程、加密
    Oracle VM VirtualBox 中安装linux步骤
    009--项目成本管理
    008--项目立项管理
  • 原文地址:https://www.cnblogs.com/voiphudong/p/3644296.html
Copyright © 2011-2022 走看看