【问题标题】:Decode unicode escape characters with perl使用 perl 解码 unicode 转义字符
【发布时间】:2016-05-29 21:09:09
【问题描述】:

我讨厌问一个毫无疑问之前已经回答过十几次的问题,但我发现编码问题令人困惑,并且很难将其他人的问题与我自己的问题相匹配。

我正在从在线的 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

我确信这里有一个微不足道的修复,但我很难过。我非常感谢您能提供的任何帮助。

【问题讨论】:

  • 如果您添加binmode STDOUT, ":utf8";,它应该可以正常工作(前提是您的输出终端需要UTF8编码的数据)

标签: perl unicode


【解决方案1】:

你没有告诉 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 机器修复任何东西,我被难住了。我真的很感激帮助。 :)
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多