Ответы:
Терминал использует переменные среды, чтобы определить, какой набор символов использовать, поэтому вы можете определить его, посмотрев на эти переменные:
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=