关于perl中中文乱码的解决办法
来源:互联网 发布:北京软件测试培训 编辑:程序博客网 时间:2024/05/19 02:01
今天在测试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编码。
点击(此处)折叠或打开
- my $out=decode("gbk",$str);
这里拿我们lwp为例子,原来baidu.com的编码为gbk,转换成utf8后就不乱码了。代码如下:
点击(此处)折叠或打开
- my $url='http://www.baidu.com';
- my $content=get $url;
- die "Couldn't get $url" unless defined $content;
- my $out=decode("gbk",$content);
- print $out,"\n";
2. 字符串编码本来就是utf8, 只是utf8 flag没有打开, 那么你可以使用以下方式中的任一种来开启utf8 flag
点击(此处)折叠或打开
- $str = Encode::decode_utf8($str);
- $str = Encode::decode("utf8", $str);
二、 字符串输出乱码
字符串在程序内被正确地处理后, 要展现给用户. 这时我们需要把字符串从perl internal form转化成用户能接受的形式. 简单地说, 就是把字符串从utf8编码转换成输出的编码或表现界面的编码.这时候, 我们使用如下代码来将utf8的编码转换成其他的编码:
点击(此处)折叠或打开
- $str = Encode::encode('charset', $str);
参考:http://bbs.chinaunix.net/thread-1713194-1-1.html
- 关于perl中中文乱码的解决办法
- 关于perl中中文乱码的解决办法
- 关于中文乱码的解决办法
- 关于 Keil µVision4 中出现中文乱码的解决办法
- 关于HttpClient上传中文乱码的解决办法
- 关于HttpClient上传中文乱码的解决办法
- python jason 关于中文乱码的解决办法
- wine中中文乱码的解决办法
- C#中WebClient中文乱码的解决办法
- C#中WebClient中文乱码的解决办法
- linux中Graphics2D 中文乱码的解决办法
- 关于在AJAX中GET回的ResponseText中文乱码的最简解决办法
- 关于代码中中文字符的错误或者乱码的解决办法
- 中文乱码的解决办法
- 中文乱码的解决办法
- 关于asp从sqlserver2000数据库中取出中文数据乱码的解决办法之一
- 关于JAVA中URL传递中文参数,取值是乱码的解决办法
- 关于unity在苹果环境中中文乱码的问题?解决办法!!
- mysql 获取当前日期及格式化
- C#设计模式(六)原型模式(Prototype Pattern)
- keepalived配置文件
- exercise3
- 编程中遇到的有趣的问题
- 关于perl中中文乱码的解决办法
- PHP MySQLi 封装类完整版(汉化使用说明)
- 继承的基本概念(Java面向对象高级篇)
- 《软件研发成本度量规范释义》(第2版)
- Docker学习总结(23)——Docker搭建大规模测试环境的实践
- 51Nod-1496-最小异或和
- 真实记录我入门学习Linux系统的经历
- Java-数组的三大排序方法(冒泡排序,选择排序,插入排序)
- Monkey 介绍