首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > CGI >

PERL的转码有关问题

2012-02-10 
PERL的转码问题PERL语言在转码方面怎么实现,比如说如何在程序里实现utf-8与euc-jp或是shift-jis之间的转换

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

热点排行