gpt4 book ai didi

perl - 使用 perl 文件处理在 csv 中打印其他语言字符

转载 作者:行者123 更新时间:2023-12-04 19:31:36 24 4
gpt4 key购买 nike

我正在抓取一个基于德语的网站,我正在尝试使用 Perl 将网站内容存储在 CSV 中,但我在 csv 中遇到垃圾值,我使用的代码是

    open my $fh, '>> :encoding(UTF-8)', 'output.csv';
print {$fh} qq|"$title"\n|;
close $fh;

例如:我期望 Weiß ,Römersandalen ,但我得到 WeiÚ, Römersandalen

更新:

代码

use strict;
use warnings;
use utf8;
use WWW::Mechanize::Firefox;
use autodie qw(:all);
my $m = WWW::Mechanize::Firefox->new();


print "\n\n *******Program Begins********\n\n";

$m->get($url) or die "unable to get $url";
my $Home_Con=$m->content;
my $title='';


if($Home_Con=~m/<span id="btAsinTitle">([^<]*?)<\/span>/is){
$title=$1;
print "title ::$1\n";
}
open my $fh, '>> :encoding(UTF-8)', 's.txt'; #<= (Weiß)
print {$fh} qq|"$title"\n|;
close $fh;

open $fh, '>> :encoding(UTF-8)', 's1.csv'; #<= (Weiß)

print {$fh} qq|"$title"\n|;
close $fh;

print "\n\n *******Program ends********";
<>;

这是代码的一部分。该方法适用于文本文件,但不适用于 csv。

最佳答案

您向我们展示了在将数据写入文件时正确编码数据的代码。

我们还需要了解数据如何进入您的程序。你当时解码正确吗?

更新:

如果代码真的只是 my $title='Weiß ,Römersandalen' 正如您在评论中所说,那么解决方案就像添加 use utf8 一样简单到你的代码。

重点是 Perl 需要知道如何解释它正在处理的字节流。在您的程序之外,数据以各种编码的字节形式存在。您需要在数据进入您的程序时对该数据进行解码(解码将字节流转换为字符串)并在它离开您的程序时再次对其进行编码。您正确地执行了编码步骤,但没有正确执行解码步骤。

use utf8 在您给出的简单示例中修复该问题的原因是 use utf8 告诉 Perl 您的源代码应该被解释为字节流编码为utf8。然后将该字节流转换为包含“Weiß ,Römersandalen”的正确字符的字符串。然后,它可以成功地将这些字符编码为字节,表示这些字符在写入文件时编码为 utf8。

您的数据实际上来自网页。我假设您正在使用 LWP::Simple 或类似的东西。该数据可能被编码为 utf8(考虑到您遇到的问题,我对此表示怀疑)但它也可能被编码为 ISO-8859-1 或 ISO-8859-9 或 CP1252 或任何其他编码。除非您知道编码是什么并正确解码传入数据,否则您将看到获得的结果。

关于perl - 使用 perl 文件处理在 csv 中打印其他语言字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18398570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com