perl pack a utf-8 Chinese character如何解压缩才能获得这个角色?

时间:2015-07-03 04:23:19

标签: perl unicode encoding utf-8

我在perl中学习pack函数。我发现我不能unpack并获得原始值。以下是代码。文件编码utf8。我怎样才能打开包装并获得中文字符。

我查看了perldoc。我不确定我可以使用哪种模板。文件说:

  

U一个Unicode字符编号。以字节模式编码为字符,以字节模式编码为UTF-8(或EBCDIC平台中的UTF-EBCDIC)。

所以我尝试了U。但它没有用。

use Encode;

open(DAT,"+>T.dat");
binmode(DAT,":raw");

print DAT pack("f",-3.938345);
print DAT pack("l",1234556);
print DAT pack("U*","我");

seek(DAT,0,0);
read(DAT,$Val,4);
$V=unpack("f",$Val);
print "V $V\n";
read(DAT,$int,4);
$I=unpack("l",$int);
print "int $I\n";
read(DAT,$HZ,4);
$HZ=unpack("U*",$HZ);
print("HZ $HZ\n");

close(DAT);

我有另一个问题,我知道如果用GB2312编码,一个汉字只占用2个字节。如何打包一个字符,只占用2个字节?

1 个答案:

答案 0 :(得分:2)

Perl中的Unicode packunpack以相反的方式工作:

use utf8;
binmode STDOUT,":utf8";

my $packed = pack("U*", 0x6211);
print "$packed\n";  # 我

my $unpacked = unpack("U*", "我");
printf "0x%X\n", $unpacked;  # 0x6211