2015-04-01 10:59 GMT+02:00 Nick Knutov <[email protected]>:
> use utf8::all;
...
> say Dumper p2json($ha);
>
> $VAR1 = '{"c":"д","a":1,"b":"c"}';
>
> Однако, если вместо uft8::all использовать просто utf8, то всё хорошо:
>
> $VAR1 = '{"c":"д","a":1,"b":"c"}';
>
> Отсюда вопрос - почему такая фигня и что делать?

Такая фигня: потому что encode_json() отдаёт байты (всё верно, он же
сериализатор). А utf8::all, цитирую: "Filehandles are opened with
UTF-8 encoding turned on by default (including STDIN, STDOUT,
STDERR)". Потому say() повторно кодирует то, что ему дали в UTF-8.
Выходит двойное кодирование. Попробуйте добавить binmode STDOUT,
':raw'; и всё вернётся "в норму".

Что делать: из вашего вопроса не понятно, чего вы добиваетесь.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить