[Moscow.pm] UTF-8, локализованные сообщения об ошибках , как решить?
Alexander Lourier
aml на rulezz.ru
Сб Фев 14 12:20:44 PST 2009
On Saturday 14 February 2009 20:34:07 Dmitry E. Oboukhov wrote:
[skip]
> print "$!\n" unless $c;
> print decode utf8=>"$!\n" unless $c;
>
> работает так:
>
> perl test.pl
> Ð Ñоединении оÑказано
> В соединении отказано
>
>
> То бишь решение вроде бы и есть, но такое некрасивое что жуть.
>
> 1. нельзя ли глобальной прагмой какой этот вопрос решить?
Посмотрел исходники, как обрабатывается $! - он просто берет strerror из
сишной библиотеки, и возвращает. Она, естественно, и не догадывается о
внутреннем представлении utf8-строк в Perl. Если есть желание патчить, самое
правильное место - mg.c в обрабочике Perl_magic_get - $! и $^E. Там где
загружается значение скаляра, надо установить флаг utf8. Без патча исходников
AFAIK перехватить обработку магических переменных невозможно.
> 2. нельзя ли отключить локализацию сообщений об ошибках?
use POSIX;
POSIX::setlocale(&POSIX::LC_MESSAGES, 'C');
Подробная информация о списке рассылки Moscow-pm