[Moscow.pm] utf8:all vs json

Maxim Vuets maxim.vuets на gmail.com
Ср Апр 1 02:28:19 PDT 2015


2015-04-01 10:59 GMT+02:00 Nick Knutov <mail на knutov.com>:
> 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