Як дізнатися, чи підтримує термінал 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.
Епсілон

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

@Gilles, ваша відповідь геніально проста. Любіть це!

20

Введіть це у свій термінал:

echo -e '\xe2\x82\xac' 

Якщо ваш термінал підтримує UTF-8, він видасть знак євро:


Не всі шрифти мають знак євро, тому може бути доцільним інший тестовий код.
Майкл Хемптон

5

Найменший спосіб: запустіть наступний і перевірте вихід. Це буде велика величина O з circumflex, якщо на терміналі відображається UTF-8.

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

Я впевнений, що зараз мій термінал підтримує UTF-8 (пройшов тест, запропонований theman_on_osx), але це просто виводить порожній рядок. Що відбувається?
Whatsit

Можливо, шрифт, який ви використовуєте в додатку терміналу, не підтримує символи UTF-8.
там

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
Це не перевіряє термінал. Він відображає лише параметри локалі.
grawity

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.
grawity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.