[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