[Moscow.pm] utf8:all vs json

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


$json = $json->utf8 ([$enable])

If |$enable| is true (or missing), then the |encode| method will encode
the JSON result into UTF-8, as required by many protocols, while
the |decode| method expects to be handled an UTF-8-encoded string.
Please note that UTF-8-encoded strings do not contain any characters
outside the range |0..255|, they are thus useful for bytewise/binary I/O.

Видимо, я неправильно понимал что есть utf8 encoded string - по этому
описанию получается, это utf8 encoded string есть последовательность
байтиков без флага utf8 (и тесты с utf8::is_utf8 это предположение
подтверждают).

Почему это называется "encode the JSON result *into UTF-8*" когда оно
наоборот в байтики?

И непонятным остается "as required by many protocols" - ни разу не
видел, чтобы какое-то апи или протокол требовали юникод ввиде байтиков
вместо юникода.


01.04.2015 15:31, Nick Knutov пишет:
> utf8::all в дансере (и не только в нем) нужен, например, чтобы
> избежать "Wide character in print" во всевозможных местах, и при этом
> получать везде строчки в юникоде, а не ввиде \x{123}.
>
> И, судя по всему, двойное кодирование происходит (или может
> происходить) и без utf8::all.
>
> Например, если никаких utf8/utf8::all нет и я использую родной
> from_json, а в конфиге для json включен utf8
>
> engines:
>   JSON:
>     utf8: '1'
>
> и в хеше - уже юникод с флагом, что оно юникод, то
>
> return to_json $ha;
>
> гарантированно ломает юникод. Я уже начинаю сомневаться, правильно ли
> я понимаю в документации описание флага utf8 в json, потому что,
> получается, с ним всегда происходит еще одно кодирование, что явно не
> является желаемым поведением по умолчанию, однако encode_json - это
> именно |JSON::XS->new->utf8->encode (||$perl_scalar||)|
>
>
> ps: Dancer::Serializer - это совсем про другое.
>
>
> 01.04.2015 15:16, Maxim Vuets пишет:
>> 2015-04-01 12:06 GMT+02:00 Nick Knutov <mail на knutov.com>:
>>> Если из-за utf8::all или неизвестно чего еще в фреймворке где-то происходит
>> Настоятельно не рекомендую использовать utf8::all в Дансере. Опять же,
>> не знаю за первый, но второй сам включает эти штуки (я говорил об этом
>> в прошлом ответе). Чревато плохими побочными эффектами. Используя
>> Дансер, нужно играть по его правилам.
>
> -- 
> Best Regards,
> Nick Knutov
> http://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130 
>
>

-- 
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/d263dc7e/attachment-0001.html>


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