gpt4 book ai didi

perl - UTF-8 编码的 JSON 文件,试图用 JSON 模块解析 - 宽字符

转载 作者:行者123 更新时间:2023-12-05 03:02:42 26 4
gpt4 key购买 nike

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

该文件在 Notepad++ 中以 UTF-8 编码:

enter image description here

...然而,当我运行我的脚本时,我得到:

perl test.cgi
Wide character in subroutine entry at test.cgi line 11.

第 11 行是:

my $ref =  JSON->new->utf8->decode($json_contents);

我对自己做错了什么感到困惑。也许我只是需要休息一下!任何建议将不胜感激!

最佳答案

您正在尝试对 UTF-8 进行双重解码:

#!/usr/bin/perl
use strict;
use warnings;

use JSON;
use Data::Dumper;

open(my $fh, '<:encoding(UTF-8)', $ARGV[0]) or die $!;
my @lines = <$fh>;
close($fh) or die $!;

# Wide character in subroutine entry at dummy.pl line 14.
my $ref = JSON->new->utf8->decode(join('', @lines));

# OK, no warning.
my $ref = JSON->new->decode(join('', @lines));

print Dumper($ref);

exit 0;

试运行

$ cat dummy.json
{
"path": "ä⁈"
}

# with ->utf8
$ perl dummy.pl dummy.json
Wide character in subroutine entry at dummy.pl line 14.

# without ->utf8
$ perl dummy.pl dummy.json
$VAR1 = {
'path' => "\x{e4}\x{2048}"
};

关于perl - UTF-8 编码的 JSON 文件,试图用 JSON 模块解析 - 宽字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54535769/

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