有关适用于Perl5.7以前版本的UCS2到GBK内码互换解决方案
尽管Perl 5.8 已经Encode实现了不同内码的显示和转换,但是现在遇到初始安装5.6.1的系统还是很多。于是,想到如果能在Perl5.6.1就支持UCS2到GBK内码的互换就很方便了。到CPAN上下载Encode2.14模块,安装,说需要 至少需要Perl5。7,才能支持。查了一下网上,没有类似信息。于是只有自己动手解决了。
参考网上流行的PHP的解决方法, 研究了两天终于完成了。
具体思路是:
利用unicode.org的gb2312.txt 文件,得到unicode和gb2312内码之间的映射关系。这样我们就可根据unicode内码找出gb2312的内码。由于GBK是GB2312的扩展,所以,很快我们就可以换算得到GBK内码。同理,我们也可以根据GBK内码得到Unicode内码。
不过在由于Perl在内部遇到Unicode的字符,是以UTF8的内码表示的。所以还要经过UTF8专到UCS2,才能利用上面提到的文件进行内码的转换。UTF8和UCS2之间的关系,在此就不再多叙述,网上已经有很多相关的文章。
#!/usr/bin/perl -w
use strict; use lib "./"; use HanConvert;
my $utf="a你好中国"; $utf=utf2ucs($utf); my $gbkstr=ucs2gbk($utf); print $gbkstr;
|
类似,我们也可以根据gb2312.txt,从GB2312码得到Unicode内码。在此就不再敖述。
sub gbk2utf{
...
}
不过在目前的模块中,还没有实现该功能。
注意:这个程序可在以System Default Charset为GBK的窗口中显示中文。一个小技巧是,用SecureCRT访问任何UNIX主机,该例程均可以在SecureCRT窗口中,正确显示中文。测试通过的有RedHat 7.3, solaris 8/9 sparc.
该模块的安装方法,直接释放到安装perl的site/lib下面即可!
|
文件: |
HanConvert.zip |
大小: |
43KB |
下载: |
下载 | |
阅读(3638) | 评论(1) | 转发(0) |