首页 > 解决方案 > 来自 JSON 问题的 Perl 编码

问题描述

如果这是一个非常愚蠢的问题或已经在其他地方问过,我们深表歉意。我正在阅读一些 JSON 并在其上使用 decode_json,然后从中提取文本并将其输出到文件中。

我的问题是 Unicode 字符在 JSON 中被编码为例如 \u2019,decode_json 似乎将其转换为 \x{2019}。当我抓取此文本并输出到 UTF8 编码文件时,它显示为垃圾。

示例代码:

use warnings;
use strict;
use JSON qw( decode_json );
use Data::Dumper;

open IN, $file or die;
binmode IN, ":utf8";
my $data = <IN>;
my $json = decode_json( $data );
open OUT, ">$outfile" or die;
binmode OUT, ":utf8";
binmode STDOUT, ":utf8";
foreach my $textdat (@{ $json->{'results'} }) {
    print STDOUT Dumper($textdat);
    my $text = $textdat->{'text'};
    print OUT "$text\n";
}

Dumper 输出显示 \u 编码已转换为 \x 编码。我究竟做错了什么?

标签: jsonperlunicode

解决方案


decode_json需要 UTF-8 编码的输入,所以使用from_json接受 unicode 的代替:

my $json = from_json($data);

另一种选择是自己编码数据:

use Encode;

my $encoded_data = encode('UTF-8', $data);
...
my $json = decode_json($data);

但是仅仅为了解码而对数据进行编码是没有意义的。


推荐阅读