在嘗試解碼來自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