我在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个字节?
答案 0 :(得分:2)
Perl中的Unicode pack
和unpack
以相反的方式工作:
use utf8;
binmode STDOUT,":utf8";
my $packed = pack("U*", 0x6211);
print "$packed\n"; # 我
my $unpacked = unpack("U*", "我");
printf "0x%X\n", $unpacked; # 0x6211