Як отримати кодування символів терміналу


Відповіді:


108

Термінал використовує змінні середовища, щоб визначити, який набір символів використовувати, тому ви можете визначити його, переглянувши ці змінні:

echo $LC_CTYPE

або

echo $LANG

4
Ці змінні середовища використовуються програмами, які використовують термінал для вводу / виводу. Сам емулятор терміналів не має про них ніяких знань, і його на даний момент ефективне кодування символів - це налаштування десь у програмі емулятора (член даних всередині класу libvte у випадку терміналу GNOME).
JdeBP

упорядкованість змінних, запропонованих тут, не є хорошою. більш повним рішенням буде щось на зразок: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. знову ж таки, встановлена ​​змінна не є гарантією того, що вони дійсні, тому слід дотримуватися localeпрограми (як це видно з інших відповідей тут).
Майк Фрайзінгер

Як сказав @JdeBP, термінал не використовує localeзмінні середовища для визначення його кодування. Однак термінал може дозволити додаткам, які взаємодіють з ним, знати його кодування шляхом встановлення localeзмінних середовища. Наприклад, на MacOS ви можете вибрати кодування терміналу і , можливо , встановити localeзмінні оточення при запуску терміналу в Terminal> Preferences> Profiles> Advanced.
Maggyero

97

locale команда без аргументів буде друкувати значення всіх відповідних змінних середовища, за винятком LANGUAGE.

Для поточного кодування:

locale charmap

Для наявних місцевостей:

locale -a

Для доступних кодувань:

locale -m

1
Це те, що працювало для мене в системі CentOS. Він показав кодування системи на основі поточних налаштувань мови. Налаштування терміналу, які використовуються для того, щоб дістатися до цієї машини, - це інша історія та функція клієнта, який використовується.
Філ ДД

45

Перевірте кодування та мову:

$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR

Отримати всі мови:

$ locale -a

Змініть на pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"

16

Якщо у вас є Python:

python -c "import sys; print(sys.stdout.encoding)"

1
З усіх перерахованих вище пропозицій єдиною пропозицією, яка працювала на моєму вікні Slackware64 v. 14.2, був цей фрагмент python. Дякую!
Томас Альтодт Добрий

6

Наскільки мені відомо, ні.

Кругові ознаки від $LC_CTYPE,locale здається , і така міць заманливо, але вони повністю відокремлені один від кодує програми терміналу ( на насправді емулятор) , трапляється, використовуючи при відображенні символів на екрані.

Вони єдиним способом точно визначити кодування - це вивести щось тільки присутні в кодуванні, наприклад ä , зробити знімок екрана, проаналізувати це зображення і перевірити, чи правильний символ виводу.

Так ні, це неможливо, на жаль.


0

Щоб побачити поточну інформацію про локальну мову, використовуйте localeкоманду. Нижче наводиться приклад на RHEL 7.8

[usr@host ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.