Я испытываю странное поведение в Perl при попытке декодирования строки JSON Unicode, поступающей из функции json_encode
PHP-скрипта. Я упростил задачу до следующего кода:
#!/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, но для этого требуется установка дополнительного модуля «Кодировщик», которого я хочу избежать.