Відповіді:
Термінал використовує змінні середовища, щоб визначити, який набір символів використовувати, тому ви можете визначити його, переглянувши ці змінні:
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=