专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > CGI

PERL的转码有关问题

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
PERL的转码问题
PERL语言在转码方面怎么实现,比如说  
如何在程序里实现utf-8与euc-jp或是shift-jis之间的转换,希望做过的高手给个指点,谢谢了,急用啊.
能给一段小例子吗  


------解决方案--------------------
=========程序1========
$a = '中文输入 ';
print $a;
======================

下面是程序2

=========程序2========
use Encode;
use Encode::CN;

$a = '中文输入 ';
$b = encode( "euc-cn ",decode_utf8($a));
print $b;
======================

程序2说明:
因为保存的文本为utf-8格式,所以$a内容为utf-8
decode_utf8($a) , 先将$a的内容(utf-8格式)用utf-8编码decode一下

Encode::CN模块中,encode语法为:encode( "euc-cn ",$utf-8)
按照该格式,将decode过的$a再用中文编码encode一遍即可:$b = encode( "euc-cn ",decode_utf8($a));
$b 为返回值,是encode出来的中文编码
希望这个能给你帮助
------解决方案--------------------
use encoding "euc-jp ", STDIN=> "shiftjis ", STDOUT=> "shiftjis ";
use Unicode::Normalize;#use Encode qw/encode decode/;

这样试试
------解决方案--------------------
通过改变PerlIO层的编码即可实现,配合encoding指示符可以使操作过程更为自然,如读取UTF-16编码的文本文件:
use encoding 'gbk '; # 系统默认编码为GBK
use open IN=> ':encoding(utf16) '; # 读入文件时认为数据按UTF-16编码,自动根据BOM头判断是LE还是BE
open(FH, "test.txt ") or die;
while( <FH> ) { # 读入数据时自动从UTF-16转换为标准的UTF-8编码的Perl字符串
chomp;
print "$_n "; # 由于encoding指定了系统默认编码,输出时数据自动从UTF-8转换为GBK
}

也可以用open的3参数形式指定单个文件句柄的PerlIO层编码,并在输出时手工转换编码:
use Encode; # 需要使用encode函数实现手工转码
open(FH, " <:encoding(utf16) ", "test.txt ") or die; # 指定FH句柄的数据为UTF-16编码
while( <FH> ) { # 读入数据同样自动转换为UTF-8
chomp;
print encode( "gbk ",$_), "n "; # 手动将UTF-8编码字符串转换为GBK编码字符串输出
}

另外使用binmode可以随时切换某个文件句柄的PerlIO层编码,如:
binmode(FH, ":encoding(utf16) "); # 将FH的数据编码置为UTF-16
binmode(FH, ":raw "); # 不对FH的数据进行编解码处理
binmode(FH, ":utf8 "); # 将FH的数据编码置为UTF-8
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: