[Moscow.pm] use encoding и манипуляции со строками

Анатолий Гришаев 0body0 на rambler.ru
Пт Апр 24 11:35:45 PDT 2015


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 <victor на vsespb.ru 
> <mailto:victor на vsespb.ru>> написал:
> >
> > 2015-04-24 19:54 GMT+03:00 Denis Ibaev <dionys на gmail.com 
> <mailto:dionys на gmail.com>>:
> > > Привет.
> > >
> > > Не могу понять, почему в одном случае ниже приведённый скрипт 
> выставляет у
> > > строки флаг 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
>
> -- 
> Денис Ибаев
>
>
>

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150424/a8380428/attachment.html>


Подробная информация о списке рассылки Moscow-pm