Відповіді:
Термінал використовує змінні середовища, щоб визначити, який набір символів використовувати, тому ви можете визначити його, переглянувши ці змінні:
echo $LC_CTYPE
або
echo $LANG
locale
програми (як це видно з інших відповідей тут).
locale
змінні середовища для визначення його кодування. Однак термінал може дозволити додаткам, які взаємодіють з ним, знати його кодування шляхом встановлення locale
змінних середовища. Наприклад, на MacOS ви можете вибрати кодування терміналу і , можливо , встановити locale
змінні оточення при запуску терміналу в Terminal
> Preferences
> Profiles
> Advanced
.
locale
команда без аргументів буде друкувати значення всіх відповідних змінних середовища, за винятком LANGUAGE.
Для поточного кодування:
locale charmap
Для наявних місцевостей:
locale -a
Для доступних кодувань:
locale -m
Якщо у вас є Python:
python -c "import sys; print(sys.stdout.encoding)"
Наскільки мені відомо, ні.
Кругові ознаки від $LC_CTYPE
,locale
здається , і така міць заманливо, але вони повністю відокремлені один від кодує програми терміналу ( на насправді емулятор) , трапляється, використовуючи при відображенні символів на екрані.
Вони єдиним способом точно визначити кодування - це вивести щось тільки присутні в кодуванні, наприклад ä
, зробити знімок екрана, проаналізувати це зображення і перевірити, чи правильний символ виводу.
Так ні, це неможливо, на жаль.
Щоб побачити поточну інформацію про локальну мову, використовуйте 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=