<http://search.cpan.org/search?mode=module&query=perldoc>perldoc perldiag
| grep -A 9 'Wide char'
       Wide character in %s
           (S utf8) Perl met a wide character (>255) when it wasn't
expecting
           one.  This warning is by default on for I/O (like print).  The
           easiest way to quiet this warning is simply to add the ":utf8"
           layer to the output, e.g. "binmode STDOUT, ':utf8'".  Another way
           to turn off the warning is to add "no warnings 'utf8';" but that
is
           often closer to cheating.  In general, you are supposed to
           explicitly mark the filehandle with an encoding, see open and
           "binmode" in perlfunc.

1. либо убрать use utf8;
2. либо binmode STDERR, ":utf8"; binmode STDOUT, ":utf8";
3. ну или так :)
no utf8;
my $aa = { a=>'b', c=> 'д' }; # тут русская
буква

use utf8;


11 марта 2015 г., 21:26 пользователь Nick Knutov <[email protected]> написал:

> Он там есть. use utf8::all так же не помог. При этом from_yaml там же
> работает абсолютно нормально и прозрачно - исходный хеш в ютф,
> сериализуется в строку с ютф, в базу пишется, из базы берется,
> десериализуется нормально и на выходе везде ютф.
>
>
> 11.03.2015 19:03, TheAthlete пишет:
> > Тут нужен use utf8;
> >
> > perl -Mutf8 -MJSON::XS -E '$h = {a=>"b", c=>"д"}; $s =
> > encode_json($h); say $s'
> > {"c":"д","a":"b"}
> >
> > perl -MJSON::XS -E '$h = {a=>"b", c=>"д"}; $s = encode_json($h); say $s'
> > {"c":"д","a":"b"}
> >
> > Nick Knutov <[email protected]> писал(а) в своём письме Wed, 11 Mar 2015
> > 12:05:47 +0300:
> >
> >> Столкнулся с проблемой, туплю и не могу понять почему всё так.
> >>
> >> use Dancer ':syntax';
> >> ...
> >> my $aa = { a=>'b', c=>'д' }; # тут русская буква
> >> my $jj = to_json($aa);
> >> utf8::is_utf8($jj); # returns 1
> >> my $bb = from_json($jj);
> >>
> >> Получаю Wide character in subroutine entry. Почему?(1)
> >>
> >> Ок, грепаю рассылку, делаю
> >>
> >> my $jj = to_json($aa);
> >> utf8::encode($jj);
> >> my $bb = from_json($jj);
> >>
> >> Судя по Dumper($aa, $jj, utf8::is_utf8($jj), $bb);
> >> $bb теперь такое же, как $aa, а вот $jj в текстовом представлении
> >> $VAR2 = '{
> >>    "c" : "д",
> >>    "a" : "b"
> >> }';
> >> т.е. содержит совсем не 'д' Почему?(2)
> >>
> >> Почитав документацию на модули, я подумал, что from_json всегда ожидает
> >> отсутствие utf8 флага, но есть decode_json, которая для случая когда
> >> флаг есть. Ок. Делаем
> >> use Cpanel::JSON::XS 'decode_json';
> >> $cc = Cpanel::JSON::XS::decode_json($jj);
> >>
> >> И если перед этим не было utf8::encode($jj);, то снова Wide character in
> >> subroutine entry. ПОЧЕМУ???(3) Ведь у строки есть флаг и decode_json,
> >> судя по документации, ожидает его наличия.
> >>
> >> и (4) - как правильно делать все это?
>
> --
> Best Regards,
> Nick Knutov
> http://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>



-- 
С уважением
Михаил Шогин.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить