[Moscow.pm] Mojo::Log и utf8

Maxim Vuets maxim.vuets на gmail.com
Вт Дек 11 09:25:52 PST 2012


2012/12/11 Denis Evdokimov <evdokimov.denis на gmail.com>:
> т.е. у него есть все основания выставить utf8 флаг, а именно:

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

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

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

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

> 1. use utf8;

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

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

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

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

Я сомневаюсь, что за это отвечает ОС. Скорее libc с её библиотекой
локализации (типа gettext) или что-то в этом роде.


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