Perl UTF-8编码的JSON文件,尝试使用JSON模块范围的字符进行解析
我有一个非常简单的Perl脚本:Perl UTF-8编码的JSON文件,尝试使用JSON模块范围的字符进行解析,perl,utf-8,Perl,Utf 8,我有一个非常简单的Perl脚本: use JSON; use open qw/ :std :encoding(utf8) /; #my $ref = JSON::decode_json($json_contents); my $path = "/home/chambres/web/x.org/public_html/cgi-bin/links/admin/booking_import/import/file.json"; my $json_contents = slurp_utf8_fi
use JSON;
use open qw/ :std :encoding(utf8) /;
#my $ref = JSON::decode_json($json_contents);
my $path = "/home/chambres/web/x.org/public_html/cgi-bin/links/admin/booking_import/import/file.json";
my $json_contents = slurp_utf8_file($path);
my $ref = JSON->new->utf8->decode($json_contents);
sub slurp_utf8_file {
my @back;
#open my $in, '<:encoding(UTF-8)', $_[0] or die $!;
open my $in, "<$_[0]" or die $!;
while (<$in>) {
push @back, $_
}
close ($in);
return join("", @back);
}
第11行是:
my $ref = JSON->new->utf8->decode($json_contents);
我对自己做错了什么感到困惑。也许我只是需要休息一下!任何建议都将不胜感激 您正在尝试双重解码UTF-8:
#/usr/bin/perl
严格使用;
使用警告;
使用JSON;
使用数据::转储程序;
打开(我的$fh,'你不是在尝试双UTF-8解码吗?你已经在slurp中解码UTF-8了,为什么你需要JSON对象上的->utf8
?啊,伙计-有时候你只需要一双额外的眼睛来查看它!我想这是因为你试图使用File::slurp::read_File,但这显然对utf8不好-所以我转向重新设计我自己读文件,但我想我没有把那部分也拿出来。谢谢你保存我的理智:)@AndrewNewby建议改为使用更简单的函数。因此,您可以使用read_binary原样读取字节,然后使用标准UTF-8解码json解码器。@Grinnz感谢您的建议。在下一个项目中,我将尝试记住这一点:)(目前,我使用的方法是根据需要工作的,所以包括一个完整的额外模块没有多大意义:)
my $ref = JSON->new->utf8->decode($json_contents);