<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <pre wrap="">Еще больше перестал понимать как это работает, но помогло

$in = from_json( $src, { utf8 => 0 } );

(хотя я думал, что должно помочь utf8=>1 )

ps to all: мы немного увлеклись и часть писем прошла мимо рассылки,
сохранил в отквотированном.</pre>
    <br>
    <br>
    <div class="moz-cite-prefix">11.03.2015 17:59, Artem Zhuravlev
      пишет:<br>
    </div>
    <blockquote
cite="mid:CADVxfb5i7XVp7XX9A+e+NgPfy9a=0aybP0gEzzRBe8=sHyURPA@mail.gmail.com"
      type="cite">
      <div dir="ltr">JSON нужно сказать что он работает с юникодом уже
        что б 2-й раз не кодировал в случае Dancer это делается в
        config.yml
        <div><br>
          В случае обычного сценария при создании объекта нужно указать
          так что же что работаем с юникодом:</div>
        <div><br>
        </div>
        <div>
          <pre class="" style="border:1px solid rgb(136,136,136);color:rgb(0,0,0);padding:1em;background:rgb(238,238,238)"><span class="">...
$json</span> <span class="">=</span> <span class="">$json</span><span class="">-></span><span class="">utf8</span><span class="">(1</span><span class="">)</span></pre>
        </div>
        <div class="gmail_extra"><br>
          ну или в случае если не хотим работать с объектом:<br>
          <br>
          <br>
          <br>
          для функций to_json, from_json 2-й аргумент хеш с парой { utf8
           => 1|0 }<br>
          <pre class="" style="border:1px solid rgb(136,136,136);color:rgb(0,0,0);padding:1em;background:rgb(238,238,238)"> <span class="">$perl_scalar</span> <span class="">=</span> <span class="">from_json</span><span class="">(</span> <span class="">$json_text</span><span class="">,</span> <span class="">{</span> utf8  <span class="">=></span> <span class="">1</span> <span class="">}</span> <span class="">);</span></pre>
          <br>
          <div class="gmail_quote">11 марта 2015 г., 15:40 пользователь
            Nick Knutov <span dir="ltr"><<a moz-do-not-send="true"
                href="mailto:mail@knutov.com" target="_blank">mail@knutov.com</a>></span>
            написал:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Спасибо,
              это почти решило проблему. В этом случае<br>
              <span class=""><br>
                my $aa = { a=>'b', c=>'д' };<br>
              </span>my $jj = to_json($aa);<br>
              # utf8::is_utf8($jj); - returns false<br>
              my $bb = from_json($jj);<br>
              die Dumper($aa, $jj, $bb);<br>
              <br>
              $VAR1 = { 'c' => "\x{434}", 'a' => 'b' };<br>
              <span class="">$VAR2 = '{ "c" : "д", "a" : "b" }';<br>
              </span>$VAR3 = { 'c' => "\x{434}", 'a' => 'b' };<br>
              <br>
              Я не понимаю почему "д", но допустим. В реальной жизни
              между to_json и<br>
              from_json результат сохранятся и берется из мускульной
              базы. Она тоже в<br>
              utf8, (из приложения show variables like "%collat%"
              проверил - везде<br>
              utf8_general_ci). После to_json и сохранения в базе - там
              нормальный<br>
              текст с русскими буквами (проверил).<br>
              <br>
              Теперь берем строку из базы. Dumper говорит, что в ней<br>
              "\x{418}\x{432}\x{430}\x{43d}\x{43e}\x{432}". utf::us_utf8
              - true.<br>
              <br>
              Сделать from_json получается только если предварительно
              сделать<br>
              utf8::encode. Правильно ли это, или лучше сделать как-то
              иначе, чтобы<br>
              строку с json развернуть обратно в hashref?<br>
              <br>
              <br>
              <br>
              11.03.2015 15:56, Artem Zhuravlev пишет:<br>
              <span class="">> engines:<br>
                >         JSON:<br>
                >             allow_blessed:   '1'<br>
                >             canonical:       '1'<br>
                >             convert_blessed: '1'<br>
                >             utf8: '1'<br>
                ><br>
                ><br>
                > в config.yml<br>
                ><br>
                > 11 марта 2015 г., 13:45 пользователь Artem
                Zhuravlev<br>
              </span>> <<a moz-do-not-send="true"
                href="mailto:zhuravlev.ua@gmail.com">zhuravlev.ua@gmail.com</a>
              <mailto:<a moz-do-not-send="true"
                href="mailto:zhuravlev.ua@gmail.com">zhuravlev.ua@gmail.com</a>>>
              написал:<br>
              <span class="">><br>
                >     По сути нужно хеш проверить на наличие utf8, и
                если таковы будут то<br>
                >     сделать $a = encode("utf8",$a). Я писал
                рекурсию которая проверяет<br>
                >     вложенность ну и что там скаляр массив или хеш.<br>
                >     По чему так уже не помню но давно, с таким
                сталкивался полечил таким<br>
                >     костылем. Скорее всего Проблема в JSON. И там
                написано<br>
                >     <a moz-do-not-send="true"
                  href="http://search.cpan.org/%7Emakamaka/JSON-2.90/lib/JSON.pm#utf8"
                  target="_blank">http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm#utf8</a><br>
                ><br>
                >     получается что-то типо 2 раза перекодирует в
                utf8;<br>
                >     что б такого не было нужно джейсону это указать<br>
                ><br>
                >     JSON->new->utf8(1)<br>
                ><br>
                >     Но тут в Dancer врезан JSON как это сделать в
                Dancer нужно искать.<br>
                ><br>
                >     Но думаю вы поняли в чем проблема.<br>
                ><br>
                >     11 марта 2015 г., 13:36 пользователь Artem
                Zhuravlev<br>
              </span>>     <<a moz-do-not-send="true"
                href="mailto:zhuravlev.ua@gmail.com">zhuravlev.ua@gmail.com</a>
              <mailto:<a moz-do-not-send="true"
                href="mailto:zhuravlev.ua@gmail.com">zhuravlev.ua@gmail.com</a>>>
              написал:<br>
              <span class="">><br>
                >         Если<br>
                ><br>
                >         11 марта 2015 г., 13:06 пользователь Nick
                Knutov<br>
              </span>>         <<a moz-do-not-send="true"
                href="mailto:mail@knutov.com">mail@knutov.com</a>
              <mailto:<a moz-do-not-send="true"
                href="mailto:mail@knutov.com">mail@knutov.com</a>>>
              написал:<br>
              <span class="">><br>
                >             utf8 вообще везде.<br>
                ><br>
                ><br>
                ><br>
                >             11.03.2015 15:03, Artem Zhuravlev
                пишет:<br>
                >             > В какой кодировке проект? И
                консоль куда вы все это выводите?<br>
                >             ><br>
                >             > 11 марта 2015 г., 12:05
                пользователь Nick Knutov <<a moz-do-not-send="true"
                  href="mailto:mail@knutov.com">mail@knutov.com</a>
                <mailto:<a moz-do-not-send="true"
                  href="mailto:mail@knutov.com">mail@knutov.com</a>><br>
              </span>>             > <mailto:<a
                moz-do-not-send="true" href="mailto:mail@knutov.com">mail@knutov.com</a>
              <mailto:<a moz-do-not-send="true"
                href="mailto:mail@knutov.com">mail@knutov.com</a>>>>
              написал:<br>
              <div>
                <div class="h5">>             ><br>
                  >             >     Столкнулся с проблемой,
                  туплю и не могу понять почему<br>
                  >             всё так.<br>
                  >             ><br>
                  >             >     use Dancer ':syntax';<br>
                  >             >     ...<br>
                  >             >     my $aa = { a=>'b',
                  c=>'д' }; # тут русская буква<br>
                  >             >     my $jj = to_json($aa);<br>
                  >             >     utf8::is_utf8($jj); #
                  returns 1<br>
                  >             >     my $bb = from_json($jj);<br>
                  >             ><br>
                  >             >     Получаю Wide character in
                  subroutine entry. Почему?(1)<br>
                  >             ><br>
                  >             >     Ок, грепаю рассылку, делаю<br>
                  >             ><br>
                  >             >     my $jj = to_json($aa);<br>
                  >             >     utf8::encode($jj);<br>
                  >             >     my $bb = from_json($jj);<br>
                  >             ><br>
                  >             >     Судя по Dumper($aa, $jj,
                  utf8::is_utf8($jj), $bb);<br>
                  >             >     $bb теперь такое же, как
                  $aa, а вот $jj в текстовом<br>
                  >             представлении<br>
                  >             >     $VAR2 = '{<br>
                  >             >        "c" : "д",<br>
                  >             >        "a" : "b"<br>
                  >             >     }';<br>
                  >             >     т.е. содержит совсем не 'д'
                  Почему?(2)<br>
                  >             ><br>
                  >             >     Почитав документацию на
                  модули, я подумал, что<br>
                  >             from_json всегда ожидает<br>
                  >             >     отсутствие utf8 флага, но
                  есть decode_json, которая<br>
                  >             для случая когда<br>
                  >             >     флаг есть. Ок. Делаем<br>
                  >             >     use Cpanel::JSON::XS
                  'decode_json';<br>
                  >             >     $cc =
                  Cpanel::JSON::XS::decode_json($jj);<br>
                  >             ><br>
                  >             >     И если перед этим не было
                  utf8::encode($jj);, то снова<br>
                  >             Wide character in<br>
                  >             >     subroutine entry.
                  ПОЧЕМУ???(3) Ведь у строки есть флаг<br>
                  >             и decode_json,<br>
                  >             >     судя по документации,
                  ожидает его наличия.<br>
                  >             ><br>
                  >             >     и (4) - как правильно делать
                  все это?<br>
                  >             >[...]<br>
                </div>
              </div>
              <span class="">
                ><br>
                >         package MyWeb::App;<br>
                >         use Dancer ':syntax';<br>
                >         use Data::Dumper;<br>
                >         use utf8;<br>
                >         use Encode;<br>
                ><br>
                >         our $VERSION = '0.1';<br>
                ><br>
                >         get '/' => sub {<br>
                >             template 'index';<br>
                >         };<br>
                ><br>
                >         my $aa = { a=>'b', c=>'д' }; # тут
                русская буква<br>
                >         print Dumper $aa;<br>
                >         $aa->{c} = encode("utf8",$aa->{c});<br>
                >         my $jj = to_json($aa);<br>
                >         my $flag = utf8::is_utf8($jj); # returns 1<br>
                >         print Dumper $aa;<br>
                >         print Dumper $jj;<br>
                >         print "check flag = ".$flag."\n";<br>
                >         my $bb = from_json($jj);<br>
                >         print Dumper $bb;<br>
                ><br>
                ><br>
                ><br>
                >         true;<br>
                ><br>
                ><br>
                >         ========== Результат<br>
                ><br>
                >         tohil@tohil-G45M:~/dancer/MyWeb-App$
                plackup -r bin/<a moz-do-not-send="true"
                  href="http://app.pl" target="_blank">app.pl</a><br>
              </span>>         <<a moz-do-not-send="true"
                href="http://app.pl" target="_blank">http://app.pl</a>><br>
              >         Watching bin/lib bin/<a
                moz-do-not-send="true" href="http://app.pl"
                target="_blank">app.pl</a> <<a moz-do-not-send="true"
                href="http://app.pl" target="_blank">http://app.pl</a>>
              for file updates.<br>
              <div class="">
                <div class="h5">>         $VAR1 = {<br>
                  >                   'a' => 'b',<br>
                  >                   'c' => "\x{434}"<br>
                  >                 };<br>
                  >         $VAR1 = {<br>
                  >                   'a' => 'b',<br>
                  >                   'c' => 'д'<br>
                  >                 };<br>
                  >         $VAR1 = "{<br>
                  >            \"a\" : \"b\",<br>
                  >            \"c\" : \"\x{d0}\x{b4}\"<br>
                  >         }<br>
                  >         ";<br>
                  >         check flag = 1<br>
                  >         $VAR1 = {<br>
                  >                   'a' => 'b',<br>
                  >                   'c' => "\x{434}"<br>
                  >                 };<br>
                  >         [22251]  core @0.000012> PLACK_ENV is
                  set (development) forcing<br>
                  >         PSGI handler in
                  /usr/local/share/perl/5.18.2/Dancer/Handler.pm l. 35<br>
                  >         [22251]  core @0.001152> loading
                  Dancer::Handler::PSGI handler<br>
                  >         in
                  /usr/local/share/perl/5.18.2/Dancer/Handler.pm l. 49<br>
                  >         [22251]  core @0.006177> loading
                  handler 'Dancer::Handler::PSGI'<br>
                  >         in /usr/local/share/perl/5.18.2/Dancer.pm
                  l. 497<br>
                  >         HTTP::Server::PSGI: Accepting connections
                  at <a moz-do-not-send="true" href="http://0:5000/"
                    target="_blank">http://0:5000/</a><br>
                </div>
              </div>
            </blockquote>
          </div>
        </div>
      </div>
    </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>