背景
VM 虚拟机上安装了Centos7, 控制台上登录查看的编码是en_US.UTF-8,通过远程终端命令连接发现字符编码变成了zh_CN.UTF-8。mRemoteNG编码会显示中文,不太符合编码习惯。SecureCRT工具碰到中文竟然还会出现乱码,影响到平时开发。
- mRemoteNG:
[root@localhost ~]# date
2023年 05月 18日 星期四 22:18:06 CST
- SecureCRT:
[root@localhost ~]# date
2023? 05? 18? ??? 22:14:16 CST
- VM虚拟机控制台登录:
[root@localhost ~]# date
Thu May 18 22:22:29 CST 2023
# locale 命令查看当前系统编码:
mRemoteNG & SecureCRT:
[root@localhost ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
虚拟机终端控制台查看:
[root@localhost ~]# 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=
奇怪的是,远程工具显示编码的是 LANG=zh_CN.UTF-8,而控制台显示的编码是LANG=en_US.UTF-8。也就解释了为什么远程工具连接的会显示中文或者乱码。(具体的编码差异原因代查)。
现在需要更改系统默认编码配置文件即可更改编码。
[root@localhost etc]# vi /etc/locale.conf
#LANG="zh_CN.UTF-8" # 注释该行
LANG="en_US.UTF-8" # 新增该行
保存退出,然后应用即可生效。
[root@localhost ~]# . /etc/locale.conf # 引用配置文件
[root@localhost ~]# 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=
[root@localhost etc]# date # 发现回显的日期格式变成了英文
Thu May 18 22:24:49 CST 2023
现在远程终端工具连接,编码显示正常。重新打开新的窗口,也显示正常。
Ps. Centos7 系统默认编码设置文件,由/etc/sysconfig/i18n 更改为 /etc/locale.conf