使用perl解码Unicode转义字符

3

很抱歉问一个毫无疑问已经被回答过十几次的问题,但我觉得编码问题很困惑,很难将其他人的问答与我的问题匹配起来。

我正在从在线json文件中获取信息,我的perl脚本没有正确处理unicode转义字符。

脚本如下:

use LWP::Simple;
use JSON;
my $url = ______;
my $json = get($url);
my $data = decode_json($json);
foreach my $i (0 .. $#{data->{People}}) {
   print "$data->{People}[$i]{first_name} $data->{People}[$i]{last_name}\n";
}

它遇到这样的json: "first_name":"F\u00e9lix","last_name":"Cat",并将其打印为FΘlix Cat

我相信这里有一个微不足道的修复方法,但我感到困惑。非常感谢您能提供任何帮助。


如果你在输出终端中期望接收UTF8编码的数据,只需添加binmode STDOUT, ":utf8";即可使其正常工作。 - Håkon Hægland
1个回答

4

您没有告诉Perl如何编码输出。您需要添加:

use open ':std', ':encoding(XXX)';

其中XXX代表终端期望的编码格式。

在unix系统中,通常需要的是

use open ':std', ':encoding(UTF-8)';

在Windows计算机上,通常需要执行以下操作:
use Win32 qw( );
use open ':std', ':encoding(cp'.Win32::GetConsoleOutputCP().')';

非常感谢!我已经尝试了第一个建议,但它并没有解决我的Windows问题,让我陷入了困境。我真的很感激你的帮助。 :) - T. Carson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接