如何取得终端机的字符编码

现在我将 gnome 终端的字符编码改为“ GBK”(默认值是 UTF-8) ,但是如何在 Linux 中获得这个值(字符编码)呢?

318723 次浏览

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

echo $LC_CTYPE

或者

echo $LANG

检查编码和语言:

$ 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"

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

对于当前编码:

locale charmap

对于可用的地区:

locale -a

对于可用的编码:

locale -m

据我所知,没有。

来自 $LC_CTYPElocale等的间接指示可能看起来很诱人,但这些指示与终端应用程序(实际上是模拟器)在屏幕上显示字符时所使用的编码完全分离。

检测编码的唯一方法就是输出一些只存在于编码中的内容,例如 ä,截屏,分析图像,检查输出字符是否正确。

所以,很遗憾,这是不可能的。

如果你有 Python:

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

使用 locale命令查看当前的区域设置信息

[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=

https://invisible-island.net/xterm/ctlseqs/ctlseqs.html(xterm 控制字符文档)的检查表明,它符合字符集切换的 ISO 2022标准。特别是 ESC% G 选择 UTF-8。 因此,为了强制终端使用 UTF-8,需要发送这个命令。我找不到查询当前正在使用的字符集的方法,但是有办法发现终端是否支持国家替换字符集。

然而,从 字符集(7)来看,GBK (或 GB2312)似乎不是 ISO 2022支持的编码,而 xterm 本身也不支持它。因此,最好的办法可能是使用 iconv 转换为 UTF-8。

进一步的 阅读表明,GBK 的一个(重要的)子集是 EUC,这是一个 ISO2022代码,因此具有 ISO2022能力的终端可能最终还是能够显示 GBK,但是我找不到任何关于以编程方式激活该终端的提法,因此终端的用户界面将是唯一的补救办法。