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
