Perl UTF-8编码的JSON文件,尝试使用JSON模块范围的字符进行解析

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

我有一个非常简单的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_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);