2012/12/11 Denis Evdokimov <[email protected]>:
> т.е. у него есть все основания выставить utf8 флаг, а именно:

У него нет всех оснований. Во-первых, в корне неверно говорить о
выставлении флага. Повторяю: вы не должны рассчитывать на внутреннее
представление строк в Перле. Есть два случая: бинарные
последовательности и настоящие строки. И есть способ переходить от
одного представления к другому (кодирование/декодирование).

Во-вторых, что бы достичь того, что вы ожидаете, Перл должен был бы:
1. Посмотреть на кодировку текущей локали.
2. Декодировать сообщение из этой кодировки в текст.

Первое не всегда возможно, потому что локаль может называться,
например, "en_US".
Второе не всегда возможно, потому что есть локали типа zh_CN.GB18030.
Для декодирования сообщений в этой локале необходим сторонний модуль
Encode::HanExtra.

Перл не может иногда декодировать, а иногда нет. Должно быть
детерминированное поведение. Уверен, есть более основательные причины
почему это не происходит, но я их не знаю.

> 1. use utf8;

Как уже сказал Руслан, это вообще не имеет отношения к вопросу.
Прочтите внимательно perldoc utf8.

> 2. utf-ная локаль

Понятия "utf-ная локаль" нет в принципе.

> 3. За текст сообщения отвечает ОС -> можно быть уверенным, что кодировка и
> локаль одинаковые.

Я сомневаюсь, что за это отвечает ОС. Скорее libc с её библиотекой
локализации (типа gettext) или что-то в этом роде.
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить