版本记录
html
2019.4.26日 初版java
问题描述node
公司的java项目中使用了openoffice和pdf2html对文件进行格式转换,word,ppt,pdf文件都转换没有问题,惟独excel转换后显示乱码bash
背景介绍架构
项目在Docker容器中运行,Docker版本:Docker version 18.06.1-ce, build e68fc7aapp
容器系统的内核版本:3.10.0-514.el7.x86_64ide
容器系统的发型版本:Cent0S7字体
故障缘由ui
和架构沟经过后知道了word,pdf,ppt文件是经过openoffice和pdf2html配合转换的,但excel文件却没有这样处理,而是用了网上开源的java代码实现的,架构看了代码后发如今转换excel文件的时候这段代码读取了宿主系统的语言配置,因此肯定了问题的缘由就是系统字符编码设置。编码
解决方法
查看系统字符编码没问题(注意前三行),看来字符集设置正确。排查一下前三行的问题,网上说是没有安装中文字符集致使的
[root@4273aa460888 opt]# locale
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
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@4273aa460888 opt]# locale -a
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_COLLATE to default locale: No such file or directory
C
POSIX
en_US.utf8
再看一下/etc/locale.conf的内容,干,仍是英文字符集......
[root@4273aa460888 opt]# cat /etc/locale.conf
LANG="en_US.UTF-8"
好,咱们接下来安装一下中文字符集
删除yum.conf文件中的语言配置
sed -i '13'd /etc/yum.conf
安装字体和glibc
yum install -y kde-l10n-Chinese glibc-common
咱们再看一下,终于有了
[root@35b0e9b16498 opt]# locale -a|grep zh
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.big5hkscs
zh_HK.utf8
zh_SG
zh_SG.gb2312
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.big5
zh_TW.euctw
zh_TW.utf8
咱们再修改一下/etc/locale.conf文件
echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf
source /etc/locale.conf
咱们再看一下字符编码,好了,没有报错,且一切正常。
[root@35b0e9b16498 opt]# 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=zh_CN.UTF-8
补充信息
无
知识扩展
无