Как узнать, поддерживает ли терминал UTF-8


21

Я устанавливаю модуль CPAN для Perl в CentOs 5, и один из вопросов: «Поддерживает ли ваш терминал UTF-8?» (Перефразировать). Как я узнаю?

Ответы:


15

Действительно, верный способ проверить это скачать текстовый файл и отследить его в терминале и посмотреть, все ли выглядит хорошо.

или, если вы можете, перекомпилируйте терминал, включив опцию Unicode (при условии, что он есть).

как выглядят $ TERM и $ LANG?


$ TERM - это «xterm» $ LANG - это «en_US.UTF-8» (ага!). Текстовый файл хорошо отображается в терминале, но, как ни странно, не в Firefox.
Whatsit

да, я действительно столкнулся с тем же: - / ... когда я попробовал предложение Терк, я получил знак вопроса
theman_on_osx

$ LANG просто говорит вам, что ваша система будет использовать при записи в stdout / stderr. О возможностях терминала ничего не говорится. Однако, если все, что ваша система печатает из странных символов, выглядит нормально, то ваш терминал, вероятно, поддерживает UTF-8.
Epcylon

3
Это даже можно автоматизировать, отображая некоторый текст и проверяя его ширину (читая положение курсора до и после). Я разместил подтверждение концепции, предложение чего-то другого.
Жиль "ТАК - перестань быть злым"

@ Жиль, твой ответ очень прост. Любить это!

20

Введите это в свой терминал:

echo -e '\xe2\x82\xac' 

Если ваш терминал поддерживает UTF-8, он выведет знак евро:


Не все шрифты имеют знак евро, поэтому рекомендуется использовать другую контрольную точку кода.
Майкл Хэмптон

5

Самый слабый путь: запустить следующий и проверить вывод. Это будет заглавная буква «О» с огибающей, если терминал отображает UTF-8.

perl -le 'print "\x{c3}\x{94}"'

Я почти уверен, что мой терминал теперь поддерживает UTF-8 (прошел тест, предложенный theman_on_osx), но это просто выводит пустую строку. В чем дело?
Whatsit

Возможно, шрифт, который вы используете в своем терминальном приложении, не поддерживает символы UTF-8.
therek

4
Я знаю, что это очень поздно, но флаг UTF-8 Out делает эту работу лучшеperl -CO -le 'print "\x{d4}"'
Эшли

3
Или без опции -CO, дать Perl правильные байты UTF-8: $ perl -le 'print "\ x {c3} \ x {94}"' Ô
Тим

2

Самый верный способ - использовать команду «locale». Он распечатает все различные переменные, которые определяют, какой набор символов использовать. Например, это мой вывод на RHEL5.3, по умолчанию настроенный на использование только UTF-8.

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

1
Это не проверяет терминал, а только настройку локали (которая на практике не всегда устанавливается эмулятором терминала, может не отражать текущее состояние терминала или может быть переопределена некоторой пользовательской конфигурацией).
Жиль "ТАК - перестань быть злым"

1

Вы можете просто использовать следующую команду:

locale charmap

1
Это не проверяет терминал. Он отображает только настройки локали.
Гравитация

1
curl http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

или

wget -O - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt

Это очевидно требует wgetили curl.


-1
UTF=$(echo -e "\u263A")
if [[ ! "$UTF" =~ "A" ]]  ; then
 echo -n "UNICODE here!"
fi

2
Это не проверяет терминал. Он только проверяет, echoподдерживает ли встроенная программа \u.
Гравитация
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.