免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2782 | 回复: 3
打印 上一主题 下一主题

Perl用open打开文件,中文部分是乱码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-08 16:20 |只看该作者 |倒序浏览
各位大哥,我使用perl的open来打开文件,中文部分是乱码.
代码就是open文件,如下:
my $file="dt.xml";
open my $fh,"$file" or die "can not open $file\n";
while(my $line = <$fh> {
print "$line";
#...;
}
我觉得是编码不对,可是又不太懂怎么改,才开始使用perl的新手..
看了一些网上的方法,比如open my $fh, "<:encoding(utf", "$file" or die; 以及 open(FH, "<:utf8", "$file" or die $!; ..
但是好像不管用..求指教帮忙解决下,感激不尽...

另外用xml模块,读取是正常中文的,但是我想用open来进行读取.


附件解压后,即为要打开的文件,
dt.xml.gz (2.54 MB, 下载次数: 3)

论坛徽章:
0
2 [报告]
发表于 2012-12-08 16:26 |只看该作者
哪位大哥帮帮忙..我把程序测试代码也给附上,不用手动敲了:
#!/usr/bin/perl
use strict;
use warnings;

my $file="dt.xml";
open my $fh,"$file" or die "can not open $file\n";
my $num=0;
while(my $line = <$fh>{
print "$line";
return if ($num++==55);
}
close ($fh);

#--------------------------------
直接执行就能看到效果了.. 中文部分为乱码..
我在网上找了半天..实在不知道怎么搞了..{:3_201:}

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2012-12-08 17:24 |只看该作者
显示乱码是终端的问题, print 时需要把 unicode 转为终端所使用的编码,如果是 windows 终端默认是 GBK
  1. use Encode;

  2. open my $fh, '<:utf8', 'dt.xml' or die $!; # 必须设置 :utf8 否则下面 encode 结果不正确

  3. while (<$fh>) {
  4.     print encode 'GBK', $_ ;
  5. }
复制代码

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
4 [报告]
发表于 2012-12-08 18:39 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP