<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    ок, вопрос меняется:<br>
    <br>
    Если из-за utf8::all или неизвестно чего еще в фреймворке где-то
    происходит двойное кодирование (и я точно знаю, что оно происходит),
    то правильно ли, зная, что хеш в юникоде, полагать, что он будет
    всегда правильно сериализован в json с невключенными utf8?<br>
    <br>
    use Cpanel::JSON::XS qw ();<br>
    my $jsonxs = Cpanel::JSON::XS->new()-><b>utf8(undef)</b>;<br>
    sub p2json {<br>
        return $jsonxs->encode(shift);<br>
    };<br>
    <br>
    Вот это работает во всех моих тестовых случаях.<br>
    <br>
    <br>
    <div class="moz-cite-prefix">01.04.2015 14:28, Maxim Vuets пишет:<br>
    </div>
    <blockquote
cite="mid:CAG6DbogPv33k3rS8wST_EM5R2fZ29XtB=XKwkjVEfB=cWs_-tg@mail.gmail.com"
      type="cite">
      <pre wrap="">2015-04-01 10:59 GMT+02:00 Nick Knutov <a class="moz-txt-link-rfc2396E" href="mailto:mail@knutov.com"><mail@knutov.com></a>:
</pre>
      <blockquote type="cite">
        <pre wrap="">use utf8::all;
</pre>
      </blockquote>
      <pre wrap="">...
</pre>
      <blockquote type="cite">
        <pre wrap="">say Dumper p2json($ha);

$VAR1 = '{"c":"д","a":1,"b":"c"}';

Однако, если вместо uft8::all использовать просто utf8, то всё хорошо:

$VAR1 = '{"c":"д","a":1,"b":"c"}';

Отсюда вопрос - почему такая фигня и что делать?
</pre>
      </blockquote>
      <pre wrap="">
Такая фигня: потому что 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'; и всё вернётся "в норму".

Что делать: из вашего вопроса не понятно, чего вы добиваетесь.
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Best Regards,
Nick Knutov
<a class="moz-txt-link-freetext" href="http://knutov.com">http://knutov.com</a>
ICQ: 272873706
Voice: +7-904-84-23-130 </pre>
  </body>
</html>