Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何获取终端';s字符编码_Linux - Fatal编程技术网

Linux 如何获取终端';s字符编码

Linux 如何获取终端';s字符编码,linux,Linux,现在,我将gnome终端的字符编码更改为“GBK”(默认为UTF-8),但如何在Linux中获得值(字符编码)?终端用于确定要使用哪个,因此您可以通过查看这些变量来确定: echo $LC_CTYPE 或 检查编码和语言: $ 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"

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

终端用于确定要使用哪个,因此您可以通过查看这些变量来确定:

echo $LC_CTYPE


检查编码和语言:

$ 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
不带参数的命令将打印除语言之外的所有相关环境变量的值

对于当前编码:

locale charmap
对于可用的区域设置:

locale -a
有关可用编码:

locale -m
据我所知,没有

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

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

因此,很遗憾,这是不可能的。

如果您有Python:

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

要查看当前区域设置信息,请使用
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=

Short writeup:这些环境变量由使用终端进行I/O的应用程序使用。终端仿真器本身对它们一无所知,其当前有效的字符编码是仿真器程序中的某个设置(对于GNOME终端,是libvte类中的数据成员).这里建议的变量顺序不好。更完整的解决方案是:echo${LC_ALL:-${LC_CTYPE:-${LANG}}。同样,设置的变量并不能保证它们是有效的,因此您应该坚持使用
locale
程序(如其他答案所示)。正如@JdeBP所说,终端不使用
locale
环境变量来确定其编码。但是,终端可以通过设置
locale
环境变量,让与其交互的应用程序知道其编码。例如,在macOS上,您可以选择终端编码,并在终端启动时在
终端
首选项
配置文件
高级
中选择设置
区域设置
环境变量。它显示了基于当前语言设置的系统编码。用于访问该机器的终端设置是另一种情况,是所使用的客户端的功能。
[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=