如何获取终端的字符编码

时间:2011-03-15 00:17:26

标签: linux

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

6 个答案:

答案 0 :(得分:94)

终端使用environment variables来确定要使用的character set,因此您可以通过查看这些变量来确定它:

echo $LC_CTYPE

echo $LANG

答案 1 :(得分:82)

没有参数的

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

对于当前编码:

locale charmap

对于可用的区域设置:

locale -a

对于可用的编码:

locale -m

答案 2 :(得分:41)

检查编码和语言:

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

答案 3 :(得分:9)

如果你有Python:

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

答案 4 :(得分:5)

据我所知,没有。

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

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

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

答案 5 :(得分:4)

要使用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=