[Moscow.pm] utf8:all vs json

Nick Knutov mail на knutov.com
Ср Апр 1 03:06:06 PDT 2015


ок, вопрос меняется:

Если из-за utf8::all или неизвестно чего еще в фреймворке где-то
происходит двойное кодирование (и я точно знаю, что оно происходит), то
правильно ли, зная, что хеш в юникоде, полагать, что он будет всегда
правильно сериализован в json с невключенными utf8?

use Cpanel::JSON::XS qw ();
my $jsonxs = Cpanel::JSON::XS->new()->*utf8(undef)*;
sub p2json {
    return $jsonxs->encode(shift);
};

Вот это работает во всех моих тестовых случаях.


01.04.2015 14:28, Maxim Vuets пишет:
> 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'; и всё вернётся "в норму".
>
> Что делать: из вашего вопроса не понятно, чего вы добиваетесь.

-- 
Best Regards,
Nick Knutov
http://knutov.com
ICQ: 272873706
Voice: +7-904-84-23-130 

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150401/6cadfdf2/attachment.html>


Подробная информация о списке рассылки Moscow-pm