[Moscow.pm] Доклад по utf8

Vladimir V. Perepelitsa inthrax на gmail.com
Вт Сен 2 06:49:31 PDT 2008


On Tuesday 02 September 2008 17:00:12 Vyacheslav Matjukhin wrote:
> Можно увидеть пример кода?
> У меня не получается придумать пример, когда бы "\x{d0}\x{90}" можно было
> отличить от "А".
>
> $ perl -MData::Dumper -e '$x = "\x{d0}\x{90}"; $y = "А"; print Dumper $x;
> print Dumper $y;' $VAR1 = 'А';
> $VAR1 = 'А';
>
> Получается вот так:
> $ perl -MData::Dumper -e 'use utf8; $x = "\x{d0}\x{90}"; $y = "А"; print
> Dumper $x; print Dumper $y;' $VAR1 = 'А';
>  $VAR1 = "\x{410}";
>  
> Но это объясняется как раз тем, что при use utf8 строка "А" изначально
> декодирована в utf, поэтому ничего не доказывает.
>
> Мне пока кажется, что perl включает флаг только при наличии хотя бы одного
> символа с кодом >255.

Не вопрос:
$ perl -MData::Dumper -Mutf8
$_="А";
utf8::encode($_);utf8::encode($_);
utf8::decode($_);
print Dumper($_)

$VAR1 = "\x{d0}\x{90}";

Если вы смотрите только презентацию, то там непонятна оговорка.
я говорил, что я показываю как может выглядеть одна и та-же последовательность 
байт если ее должным образом покалечить :)
в данном случае - строка побита на октеты и на каждый байт выставлен флаг, 
апгрейдящий его до символа (из latin1-supplement если не ошибаюсь)

Если данная строка вне контекста выводится в STDOUT - вы не заметите разницы 
(работает игнорирование флага на <255)
а вот если скормить такую строку TT, который тоже в utf - будет бред на выходе

ну и кстати на такой строке не будут корректно работать регулярные выражения.

-- 
Vladimir Perepelitsa aka Mons Anderson
<inthrax на gmail.com> / #99779956


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