Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как определить и установить кодировку терминала?


Автор: b00 31.12.2009, 17:17
Скрипт запускается под Linux (локаль utf8), Window (active perl, cp866) и Cygwin (cp1251).
Задача - установить кодировку STDOUT такой же, как и кодировка терминала и получить на выходе читаемый русский текст.
Как это сделать правильно (если модули - то только из стандартной поставки 5.8.8 и выше)?

Пришедшее мне в голову решение работает, но всегда же хочется большего smile
Код

use utf8;
require encoding;
import encoding  ('utf8', 'STDOUT' => &SetEncoding);

sub SetEncoding {
    if ($^O =~ /^MSWin\d{2}$/i) {
        return 'cp866';
    }
    elsif ($^O =~ /^cygwin$/i) {
        return 'cp1251';
    }
    elsif ($^O =~ /^linux$/i) {
        return 'utf8';
    }
    else {
      print "Can't detect and set terminal encoding\n";
      exit 0;
    }
}

PS Всех с наступающим!

Автор: DurRandir 1.1.2010, 07:15
use CPAN, Luke smile
Term::Encoding

Но это не стандартный модуль.

Автор: LuxInTenebris 19.1.2010, 20:15
под Linux лучше всего анализировать переменную окружения LANG на предмет текущей кодировки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)