24.04.2015 20:52, Denis Ibaev пишет:
Я б не изучал, но её подключает какой-то модуль из зависимостей проекта. Из-за чего в Mojolicious ломается декодирование параметров, содержащих JSON с кириллицей. Потому что url_unescape начинает возвращать строку с флагом, и она дальше не может быть перекодирована в нужную кодировку.

1) А если переопределить url_unescape, как функцию, хотя это конечно лечить симптомы, а не болезнь.


2) Из того же разряда
BEGIN{
    *CORE::GLOBAL::chr = sub {
        if ( $_[0] < 256 ){
            use bytes;
            CORE::chr($_[0]) # или pack("C", $_[0]);
        }
        else {
            CORE::chr($_[0]);
        }
    };
}

24 апреля 2015 г., 20:36 пользователь Victor Efimov <[email protected] <mailto:[email protected]>> написал:
>
> 2015-04-24 19:54 GMT+03:00 Denis Ibaev <[email protected] <mailto:[email protected]>>:
> > Привет.
> >
> > Не могу понять, почему в одном случае ниже приведённый скрипт выставляет у > > строки флаг utf8, а в другом нет. Без прагмы encoding такого эффекта не
> > наблюдается. Может кто-нибудь объяснить?
>
> Наверное баг в прагме encoding? Она deprecated: "This module has been
> deprecated since perl v5.18.", как раз из-за своего странного
> поведения.
> Т.е. ответа на поставленный вопрос у меня нет, просто уточняю что эта
> прагма кривая и может и не стоит её поведение изучать.
>
> >
> > Вывод скрипта:
> >
> > v1 is utf-8 = 0
> > v2 is utf-8 = 0
> > v1 is utf-8 = 1
> > v2 is utf-8 = 0
> >
> > Сам скрипт:
> >
> > use strict;
> > use warnings;
> > use v5.12;
> > use utf8;
> >
> > use encoding 'utf-8';
> >
> > my $v1 = '';
> > my $v2 = '';
> >
> > utf8::downgrade($v1);
> > utf8::downgrade($v2);
> >
> > say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0;
> > say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0;
> >
> > $v1 .= chr(hex($_)) for qw(22 D0);
> > $v2 .= chr(hex($_)) for qw(D0);
> >
> > say 'v1 is utf-8 = ', utf8::is_utf8($v1) || 0;
> > say 'v2 is utf-8 = ', utf8::is_utf8($v2) || 0;
> >
> > Окружение:
> >
> > $ perl -v
> > This is perl 5, version 14, subversion 2 (v5.14.2) built for
> > x86_64-linux-gnu-thread-multi
> > (with 57 registered patches, see perl -V for more detail)
> >
> > $ perl -MEncode -E 'say Encode->VERSION'
> > 2.73

--
Денис Ибаев




-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить