在尝试解码来自PHP脚本的json_encode
函数的Unicode JSON字符串时,我在Perl中遇到了奇怪的行为。我简化了问题下面的代码:在perl中解码unicode JSON的问题
#!/usr/bin/perl
use CGI;
use JSON;
print CGI::header(-type=>'text/html', -charset=>'UTF-8');
print %{ decode_json('{"test_1" : "= \u00F9 ="}') }->{'test_1'};
print '<br>';
print %{ decode_json('{"test_2" : "= \u00F9 \u0121 ="}') }->{'test_2'};
当我在浏览器中运行该脚本我看下:
= � =
= ù ġ =
第一行包含一个“破字”,第二个是正确的。我认为碰巧的是,由于某些原因,Perl解码ISO-8859-1编码中的第一个字符串,如果我将页面编码更改为ISO-8859-1,第一行是正确的,但是第二行被破坏。
我的Perl版本是5.10.1,JSON版本是2.51。
问题:如何强制Perl json_decode
在第一次打印中返回UTF-8字符?
注意:我可以通过手动将第一个输出转换为UTF-8来解决此问题,但这需要安装额外的“编码器”模块,这是我想避免的。
[编码](http://p3rl.org/Encode)模块自从v5.7.3开始提供Perl。 – daxim 2011-04-05 22:30:30