LINUX.ORG.RU

Perl JSON::XS и кодирвка

 , ,


0

1

Всем привет.

Имеется хеш, который нужно сериализовать в json. Решил для этого заюзать хваленый модуль JSON::XS. В хеше все данные в выглядят норм, но после кодирования в json - русские слова пишутся крокозябрами. Вот код:

my %my_hash = ("test"=>"йцукен");
my $encode_json = JSON::XS->new->pretty(1)->utf8(1)->encode($my_hash);

ЧЯДНТ?


use JSON;
use utf8;

my %my_hash = ("test"=>"йцукен");
my $encode_json = JSON::XS->new->pretty(1)->utf8(1)->encode(\%my_hash);
print $encode_json;
$ perl t.pl 
{
   "test" : "йцукен"
}
imb ★★
()

1. Если русский текст написан в файле, тогда надо использовать use utf8;, как сказали.

2. Если русский текст прилетает откуда-то, тогда надо его руками конвертировать (маркировать) в utf8 через модуль Encode.

3. Это не проблема JSON::XS, это проблема Perl. Т.к. он по умолчанию использует внутренний формат utf-8, который связан с настоящим utf-8 как минимум спец. флагом, а максимум полным кодированием/декодированием. Читай доку по Encode и все поймешь.

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.