Perl/Tk如何去除窗口标题栏?- -| 回首页 | 2005年索引 | - -Win32下注册COM组件后对注册表产生的变动

Perl5.8中读取其他编码的文本文件- -

                                      

通过改变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



- 作者: chaoslawful 2005年02月28日, 星期一 22:50 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=839877

回复

评论内容: