如何获得终端的字符编码


Answers:


108

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

echo $LC_CTYPE

要么

echo $LANG

4
这些环境变量由使用I / O终端的应用程序使用。终端仿真器本身对此一无所知,其当前有效的字符编码是仿真器程序中某个位置的设置(对于GNOME Terminal,它是libvte类内部的数据成员)。
JdeBP

这里建议的变量顺序不好。一个更完整的解决方案将类似于:echo $ {LC_ALL:-$ {LC_CTYPE:-$ {LANG}}}。再说一次,设置的变量并不能保证它们是有效的,因此您应该坚持使用该locale程序(如此处其他答案所示)。
Mike Frysinger

正如@JdeBP说,终端也不能使用该locale环境变量以确定它的编码。但是,终端可以通过设置locale环境变量来让与其交互的应用程序知道其编码。例如,在Mac OS可以选择终端编码和有选择地设置locale在终端启动环境变量Terminal> Preferences> Profiles> Advanced
Maggyero '18

97

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

对于当前编码:

locale charmap

对于可用的语言环境:

locale -a

对于可用的编码:

locale -m

1
这就是我在CentOS系统上工作的原因。它显示了基于当前语言设置的系统编码。用于获取该机器的终端设置是不同的故事,并且是所使用客户端的功能。
Phil DD

45

检查编码和语言:

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

16

如果您有Python:

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

1
在上述所有产品中,对我的Slackware64 v 14.2框起作用的唯一建议是此python代码段。谢谢!
托马斯·阿特父

6

据我所知,不。

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

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

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


0

要查看当前的语言环境信息,请使用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=
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.