json - 来自 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 编码。我究竟做错了什么?
解决方案
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);
但是仅仅为了解码而对数据进行编码是没有意义的。
推荐阅读
- angular - 发送带有某人已登录令牌的标头
- firebase - 使用 Github Action 部署 Firebase
- r - 如何在 Ubuntu 中升级 IRKernel?
- php - Fatal error: require(): Failed opening required 'vendor/autoload.php' in Laravel project/Serpwow API
- python - 使用 selenium 抓取启用 Google 验证码“我不是机器人”的网站
- python - 如何在 VsCode 中定义 %time
- apache-spark - 如何避免过多的数据框查询
- php - php array target value by name instead of number
- typescript - Typescript Generic Constraint where the property of one type depends on the other
- javascript - JavaScript array delete an element from an index