如何获取终端的字符编码

Lia*_*Wul 109 linux

现在我将gnome-terminal的字符编码更改为"GBK"(默认为UTF-8),但是如何在Linux中获取值(字符编码)?

Val*_*dis 99

终端使用环境变量来确定要使用的字符集,因此您可以通过查看这些变量来确定它:

echo $LC_CTYPE
Run Code Online (Sandbox Code Playgroud)

要么

echo $LANG
Run Code Online (Sandbox Code Playgroud)

  • 这些环境变量由使用终端进行I/O的应用程序使用.终端模拟器本身并不了解它们,它当前有效的字符编码是模拟器程序中的某个设置(在GNOME终端的情况下是libvte类中的数据成员). (3认同)

nyz*_*yzm 90

locale 没有参数的命令将打印除LANGUAGE之外的所有相关环境变量的值.

对于当前编码:

locale charmap
Run Code Online (Sandbox Code Playgroud)

对于可用的区域设置:

locale -a
Run Code Online (Sandbox Code Playgroud)

对于可用的编码:

locale -m
Run Code Online (Sandbox Code Playgroud)

  • 这就是我在 CentOS 系统上的工作。它显示了基于当前语言设置的系统编码。用于访问该机器的终端设置是一个不同的故事,并且是所使用的客户端的功能。 (2认同)

小智 43

检查编码和语言:

$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR
Run Code Online (Sandbox Code Playgroud)

获取所有语言:

$ locale -a
Run Code Online (Sandbox Code Playgroud)

更改为pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
Run Code Online (Sandbox Code Playgroud)


Mar*_*oma 11

如果你有Python:

python -c "import sys; print(sys.stdout.encoding)"
Run Code Online (Sandbox Code Playgroud)


pyt*_*tor 6

据我所知,不。

从间接指征$LC_CTYPElocale并且这样的似乎诱人的,但这些都完全从编码终端应用程序(实际上是一个仿真器)分离发生在屏幕上显示字符时要使用。

他们唯一确定检测编码的方法是输出仅存在于编码中的内容,例如ä拍摄屏幕快照,分析该图像并检查输出字符是否正确。

因此,不幸的是,这是不可能的。


Ash*_*sle 5

要查看当前区域设置信息,请使用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=
Run Code Online (Sandbox Code Playgroud)