关于perl中中文乱码的解决办法

转载 2016年06月02日 10:00:45

今天在测试lwp模块的时候,发现读取的网站内容含有中文的输出后都是乱码,于是学习了一下perl的Encode模块,写一下总结,做个备忘,也希望能对其他的朋友有帮助!

    先来学习一下perl中编码的基础知识:在Perl看来, 字符串只有两种形式。一种是octets, 即8位序列, 也就是我们通常说的字节数组。另一种utf8编码的字符串, perl管它叫string。 也就是说: Perl只认识两种编码: Ascii(octets)和utf8(string)。

那么perl如何确定一个字符串是octets还是utf8编码的字符串呢? perl可没有什么智能, 他完全是靠字符串上的utf8 flag. 在perl内部, 字符串结构由两部分组成: 数据和utf8 flag.如果utf8 flag是On的话, perl就会把它当成utf8字符串来处理, 如果utf8 flag为Off, perl就会把它当成octets来处理. 所有字符串相关的函数包括正则表达式都会受utf8 flag的影响.

那么确定一个字符串的utf8 flag是否已开启? 使用Encode::is_utf8($str). 这个函数并不是用来检测一个字符串是不是utf8编码, 而是仅仅看看它的utf8 flag是否开启.

一、  字符串读入乱码

读入的内容乱码有两种情形:

1.   字符串本来不是utf8编码的, 应该先把它转成utf8编码, 并且使它的utf8 flag处于开启状态. 比如下面将gbk转换成utf8编码。


点击(此处)折叠或打开

  1. my $out=decode("gbk",$str);

这里拿我们lwp为例子,原来baidu.com的编码为gbk,转换成utf8后就不乱码了。代码如下:


点击(此处)折叠或打开

  1. my $url='http://www.baidu.com';

  2. my $content=get $url;

  3. die "Couldn't get $url" unless defined $content;

  4. my $out=decode("gbk",$content);

  5. print $out,"\n";

2.   字符串编码本来就是utf8, 只是utf8 flag没有打开, 那么你可以使用以下方式中的任一种来开启utf8 flag


点击(此处)折叠或打开

  1. $str = Encode::decode_utf8($str);

  2. $str = Encode::decode("utf8", $str);

二、  字符串输出乱码

字符串在程序内被正确地处理后, 要展现给用户. 这时我们需要把字符串从perl internal form转化成用户能接受的形式. 简单地说, 就是把字符串从utf8编码转换成输出的编码或表现界面的编码. 这时候, 我们使用如下代码来将utf8的编码转换成其他的编码:


点击(此处)折叠或打开

  1. $str = Encode::encode('charset', $str);

参考:http://bbs.chinaunix.net/thread-1713194-1-1.html

相关文章推荐

perl中文乱码

在代码头部加上:  use utf8; binmode(STDOUT, ":encoding(gbk)");

perl 中文处理 乱码

今天在处理数据时,发现perl的中文输出总是乱码,后来用 use Encoding; encode("gbk", decode("utf-8", $str)); 这样的语句转一下就好了,...

JSP中文乱码问题解决办法

  • 2012年10月31日 19:17
  • 51KB
  • 下载

springmvc 发送ajax中文乱码的几种解决办法

使用spingmvc,在JS里面通过ajax发送请求,并返回json格式的数据,从数据库拿出来是正确的中文格式,展示在页面上就是错误的??,研究了一下,有几种解决办法。    我使用的是spin...
  • kouwoo
  • kouwoo
  • 2015年01月03日 12:23
  • 740

Linux下安装Oracle中文乱码解决办法

  • 2010年04月22日 19:26
  • 3.99MB
  • 下载

jsch文件名中文乱码解决办法

  • 2015年02月10日 10:24
  • 1.36MB
  • 下载

jfreechart中文乱码解决办法总结

freechart组件操作平台各种因素很可能导致中文乱码了,下面我来给大家总结一下关于jfreechart中文乱码解决方法。 由于JFreeChart组件的版本、操作平台、JDK的设置等因素,在...

JSP页面中文乱码几个解决办法

  • 2012年04月19日 14:53
  • 13KB
  • 下载

mac MySQL中文乱码解决办法

  • 2013年11月09日 15:31
  • 288B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于perl中中文乱码的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)