服务器字符集问题

问题描述

本地打的jar包,本地docker linux镜像打打jar包,远程开发及打的jar包。用iterm打的、用terminal打的。如果在生产机器运行打时候,发现有中文的地方都变成了”?????”。

那基本上就不是打包的问题了,是生产机器的环境问题,生产机器的字符集配置不正确,就会产生这样的问题。

可以通过locale命令看一看,是不是指向的是英文的utf-8或者指向的就是C

解决方法

在下面的那些目录里面,写入那些配置指令,然后重启

# vim /etc/profile.d/locale.sh
export LC_CTYPE=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

#vim /etc/locale.conf
LANG=zh_CN.UTF-8

#vim /etc/sysconfig/i18n
LANG=zh_CN.UTF-8

#vim /etc/environment
LANG=zh.CN.UTF-8
LC_ALL=zh_CN.UTF-8

即使使用了上面的配置,还是会出现下面这个问题,怎么办?

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

这是因为,系统压根就没有安装中文字符集。centos上安装字符集没有locale-gen这个指令(别查了,我已经踩过坑了)

这就要用centos自己的方法了

localedef -v -c -i zh_CN -f UTF-8 zh_CN.UTF-8

后续

文件需要配置4个,安装字符集还有一个指令,这配置一台服务器倒还好,如果多配置几台,那不是要出人命了嘛?

所以到时候写一个脚本贴在这儿。

当然有了docker image和ansible等管理工具的话,也会方便很多。