免费注册 查看新帖 |

Chinaunix

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

perl读取utf-8编码文件乱码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-28 14:36 |只看该作者 |倒序浏览
文件是以utf-8编码存放的txt文件,用perl读取文件

并传递给调用google搜索的模块-- REST::Google::Search

搜索的结果不对,查看了下,原来是因为读取文件传递过去的

文本是乱码!!!请问这个问题该怎么解决???

论坛徽章:
0
2 [报告]
发表于 2011-01-28 15:05 |只看该作者
信息太少,无从判断。例如输入输出字符环境不同,转换方法都不同。

我的终端环境是UTF-8,文本也是UTF-8,那么如下脚本可正常输出:
  1. use strict;
  2. use encoding "utf-8";

  3. open(FH, "<:utf8", "abc.txt") or die $!;
  4. while(<FH>) {
  5.    print;
  6. }
  7. close FH;
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-01-28 15:15 |只看该作者
再比如我的终端环境是GB2312,那么脚本要如下:
  1. use strict;
  2. use Encode;

  3. open(FH, "<:utf8", "abc.txt") or die $!;
  4. while(<FH>) {
  5.    print encode("gb2312",$_);
  6. }
  7. close FH;
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-01-28 16:22 |只看该作者
[/code][b]回复 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=13422877&ptid=1852464]3#[/url] [i]兰花仙子[/i] [/b]

[code]use strict;
use REST::Google::Search;
use Encode qw/encode decode/;
use utf8;

open(TXT,"D:/new.txt") or die "Error!!!";
while(my $line = <TXT>){
        searchUrl($line);
}

close(TXT);


sub searchUrl{
        my ($key) = @_;
        REST::Google::Search->http_referer('WEB');   
    my $res = REST::Google::Search->new(
                q => $key,
                                start =>0,
                                rsz => 8
        );
         if ($res->responseStatus == 200){
                print "-----------------------";
        my $data = $res->responseData;
               
        my @results = $data->results;
        print scalar(@results);
        foreach my $r (@results) {
                        printf "\n";
            printf "title: %s\n", encode("gbk", $r->title) ;
            printf "url: %s\n", encode("gbk",$r->url );
                       
        }
         }
}

嗯~ 我把相关代码贴出来,文本我说过了编码是utf-8的,编辑器是editplus编码我也用了utf-8的

我的主要困惑是程序读取到的编码不就是utf-8吗,它传递给google接收的编码也应该是utf-8的,

而现实是google接收到了乱码~~~

论坛徽章:
0
5 [报告]
发表于 2011-01-28 16:32 |只看该作者
改成我说的open格式吧。

如果是请求Google的API,那么request header里也要设置好content-type的charset为UTF-8。

论坛徽章:
0
6 [报告]
发表于 2011-01-28 16:33 |只看该作者
回复 5# 兰花仙子


    嗯 好的

   谢谢你的帮助!

论坛徽章:
0
7 [报告]
发表于 2011-01-28 16:39 |只看该作者
回复 5# 兰花仙子


    仙子你好,其实我要读取的文件应该是excel,我查了半天也没查到excel存储是用的什么编码~~~

    我的excel是2003的

论坛徽章:
0
8 [报告]
发表于 2011-01-28 17:00 |只看该作者
回复  兰花仙子


    仙子你好,其实我要读取的文件应该是excel,我查了半天也没查到excel存储是用的什 ...
kitsilence 发表于 2011-01-28 16:39



    我的excel2003是utf8,前几天刚好写过一个脚本解析xcel,也用了这2个模块:

use encoding "utf-8";
use Spreadsheet::ParseExcel;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP