前言
java程序线上输出的log4j用less打开,中文乱码,无法排查问题,尝试更改服务器编码格式去解决。
网上找Linux RedHat 更改系统编码格式的方法,都是说要改/etc/sysconfig/i18n 这个文件,可我在我虚拟机RedHat7.5 和CentOS 6.5中找了半天也没找到i18n,尝试下面的修改方案后,成功修改了编码格式。
一、永久修改编码格式
永久修改服务器编码格式需要root权限。
1. 查看系统版本
2.查看当前编码格式
[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 ~]$
3. 修改编码格式
[root@localhost admin]# vi /etc/locale.conf
#LANG="zh_CN.UTF-8"
LANG="en_US.UTF-8"
保存之后,执行下面语句刷新文件(避免重启服务器):
[root@localhost admin]# source /etc/locale.conf
4.查看编码
[root@localhost admin]# 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=
也可在开机执行脚本文件/etc/profile中设置:
在 /etc/profile 文件中添加
export LANG=en_US.UTF-8或者export LANG=zh_CN.UTF-8
二、会话(临时)修改编码
这种方式不需要root权限,但是更改只在当前session中有效,关闭连接重新登录之后,编码还是会引用/etc/locale/conf中的内容。