2016-05-29 60 views
1

我讨厌提出一个问题,这个问题无疑已被回答了十几次,但是我发现编码问题令人困惑,并且很难将其他人的q/a与我自己的问题相匹配。用perl解码unicode转义字符

我从一个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"; 
} 

它遇到像这样jsons:"first_name":"F\u00e9lix","last_name":"Cat"并打印它们像这样:FΘlix Cat

我敢肯定,这里有一个小小的更正,但我难倒。我真的很感激你能提供的任何帮助。

+0

应该正常工作,如果你加上'binmode STDOUT, “:UTF8”;'(提供您的输出终端需要UTF8编码数据) –

回答

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().')'; 
+0

非常感谢!我找到了第一个建议,并没有在我的Windows盒子上修复任何东西,而我却死定了。我非常感谢帮助。 :) –

相关问题