- 论坛徽章:
- 0
|
我想写一个可以查看汉字的Unicode代码的程序。在cpan上发现了一个模块Unicode::Map于是下载后安装,并写了一个程序,代码如下:
- #!/usr/bin/perl
- use Unicode::Map;
- $Map = new Unicode::Map("GB2312");
- $utf16 = $Map ->; to_unicode ("黑夜白天");
- map {print "%",sprintf("%x",$_)}unpack( 'U*', $utf16);
复制代码
可成功显示Unicode码%9e%d1%59%1c%76%7d%59%29
进行逆向操作,由Unicode码打印汉字
- #!/usr/bin/perl
- use Unicode::Map;
- $Map = new Unicode::Map("GB2312");
- @code=("9e","d1","59","1c","76","7d","59","29");
- map {$_=oct("0x$_")}@code;
- print $Map->;from_unicode(pack('U*',@code));
复制代码
却只能打印“夜白天”,如果换成其它的字也是有的字可以显示出来,有的字显示不出来,有的字显示出来不对,不知何故?
如果不经过pack和unpack处理,直接逆向操作又可以正确显示比如:
- #!/usr/bin/perl
- use Unicode::Map;
- $Map = new Unicode::Map("GB2312");
- $utf16 = $Map ->; to_unicode ("黑夜白天");
- print $Map->;from_unicode($utf16);
复制代码
搞不懂是什么原因,是我的pack,unpack用法不对么?哪位高手帮忙解释一下?不胜感激! |
|