<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
use v5.14.<br>
<br>
Запустил ваш код для теста и (в некоторых почтовых клиентах картинка
окажется в аттаче):<br>
<br>
<img src="cid:part1.07050809.08060908@knutov.com" alt=""
height="248" width="637"><br>
<br>
<div class="moz-cite-prefix">11.03.2015 19:02, Михаил Шогин пишет:<br>
</div>
<blockquote
cite="mid:CALzA1Mye8GKyiH_+cnpV-3_J6BHYuKixjzSU0+Wr0=uLrdGJGQ@mail.gmail.com"
type="cite">
<div dir="ltr">А Perl какой?<br>
<br>
mshogin@guinea:~/sandbox$ set | grep LANG<br>
LANG=en_US.UTF-8<br>
LANGUAGE=en_US:<br>
<br>
mshogin@guinea:~/sandbox$ file -i <a moz-do-not-send="true"
href="http://t_dance.pl">t_dance.pl</a> <br>
<a moz-do-not-send="true" href="http://t_dance.pl">t_dance.pl</a>:
text/plain; charset=utf-8<br>
<br>
mshogin@guinea:~/sandbox$ cat <a moz-do-not-send="true"
href="http://t_dance.pl">t_dance.pl</a> <br>
use Dancer ':syntax';<br>
use Data::Printer colored => 1;<br>
<br>
my $aa = { a=>'b', c=>'д' }; # тут русская буква<br>
p $aa;<br>
my $jj = to_json($aa);<br>
p $jj;<br>
my $test = utf8::is_utf8($jj); # returns 1<br>
p $test;<br>
my $bb = from_json($jj);<br>
p $bb;<br>
mshogin@guinea:~/sandbox$ perl <a moz-do-not-send="true"
href="http://t_dance.pl">t_dance.pl</a> <br>
\ {<br>
a "b",<br>
c "д"<br>
}<br>
"{<br>
"c" : "д",<br>
"a" : "b"<br>
}<br>
"<br>
1<br>
\ {<br>
a "b",<br>
c "д"<br>
}<br>
<br>
mshogin@guinea:~/sandbox$ perl -v<br>
<br>
This is perl 5, version 14, subversion 2 (v5.14.2) built for
x86_64-linux-gnu-thread-multi<br>
<br>
<br>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">11 марта 2015 г., 14:04 пользователь
PEF Secure <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:pef-secure@yandex.ru" target="_blank">pef-secure@yandex.ru</a>></span>
написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex"><span
class="">On Wednesday, March 11, 2015 14:05:47 Nick Knutov
wrote:<br>
> Столкнулся с проблемой, туплю и не могу понять почему
всё так.<br>
><br>
> use Dancer ':syntax';<br>
> ...<br>
> my $aa = { a=>'b', c=>'д' }; # тут русская
буква<br>
> my $jj = to_json($aa);<br>
<br>
</span>А зачем вы так делаете? Понимаю, бывают случаи, но
зачем? json -- внешнее<br>
представление, как правило, его лучше, по моему мнению,
иметь заенкоденым уже.<br>
Т.е. encode_json().<br>
<span class=""><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>
> $VAR2 = '{<br>
> "c" : "д",<br>
> "a" : "b"<br>
> }';<br>
> т.е. содержит совсем не 'д' Почему?(2)<br>
<br>
</span>Результат сильно напоминает двойной ен(де?)кодинг.
Нужно найти в какой момент<br>
теряется баланс енкодинга-декодинга.<br>
<span class=""><br>
> Почитав документацию на модули, я подумал, что
from_json всегда ожидает<br>
> отсутствие utf8 флага, но есть decode_json, которая
для случая когда<br>
> флаг есть.<br>
<br>
</span>Как раз decode_json перекодирует из внешнего
(бинарного) во внутренний utf8,<br>
Т.е. флага не было => стал.<br>
<br>
perl -Mutf8 -MJSON -le '$a={a=>"b", c=>"д"}; print
0+utf8::is_utf8($a->{c});<br>
print 0+utf8::is_utf8(encode_json($a))'<br>
<br>
1<br>
0<br>
<br>
perl -Mutf8 -MJSON -le '$a={a=>"b", c=>"д"}; print
0+utf8::is_utf8($a->{c});<br>
print 0+utf8::is_utf8(encode_json($a)); print<br>
0+utf8::is_utf8(decode_json(encode_json($a))->{c}); '<br>
<br>
1<br>
0<br>
1<br>
<br>
Если у Cpanel::JSON::XS есть особенности, то я не в курсе.
Парой к to_json<br>
является from_json, насколько я знаю, они _не_меняют_ utf8.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
PEF Developer<br>
</font></span>
<div class="HOEnZb">
<div class="h5">--<br>
Moscow.pm mailing list<br>
<a moz-do-not-send="true" href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a>
| <a moz-do-not-send="true" href="http://moscow.pm.org"
target="_blank">http://moscow.pm.org</a><br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<br>
-- <br>
<div class="gmail_signature">С уважением<br>
Михаил Шогин.<br>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
</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>