症状:公司定制的帆软报表工具部署到Linux(CentOS)环境后,生产的图片中的中文乱码
可能原因:
1.字符集错误
有两种可能:
1)代码中字符集使用错误,因其他环境可以使用,这种原因可以确定没问题
2)环境没有安装相应的字符集
2.没有相应的字体

1.字符集

1)查看系统使用的字符集,有以下几个命令
locale
echo $LANG
env | grep LANG

2)查看系统支持的字符集
locale -a //查看本地字符集
locale -m //查看所有支持的字符集

3)修改字符集
a.修改i18n配置
网上很多帖子,说是修改/etc/sysconfig/i18n,但也有很多人抱怨说找不到这个配置,可以尝试自己创建这个文件,输入如以下内容
LANG="zh_CN.UTF-8" #(指定当前操作系统的字符集)
SUPPORTED="zh_CN.UTF-8" #(指定当前操作系统支持的字符集)
SYSFONT="lat0-sun16" #(指定当前操作系统的字体)
然后执行source /etc/sysconfig/i18n 命令生效配置

b.查看locale命令输出结果,如有zh cn 表示已经安装了中文语言
如果没有可以通过网上下载安装中文语言包yum groupinstall chinese-support
然后vim /etc/profile
最后面加入
export LC_ALL="zh_CN.UTF-8"
然后执行source /etc/profile 命令生效配置

4)安装字符集
Linux下几个i18n(internationalization)相关的目录和文件
/etc/sysconfig/i18n(文件)这个文件是用来配置整个操作系统的locale的,就像Windows操作系统上的Locale一样,它可以用来配置当前的语言,字符集等。例如,一个可能的/etc/sysconfig/i18n的文件如下所示:
LANG="zh_CN.GB2312" (指定当前操作系统的字符集)
SUPPORTED="zh_CN.GB2312"(指定当前操作系统支持的字符集)
SYSFONT="lat0-sun16"(指定当前操作系统的字体)

/usr/share/i18n/charmaps(目录) 这个目录下存放了该Linux操作系统可用字符集的安装包,如果你的操作系统上没有安装某个字符集可以到这个目录下寻找安装包。例如:GB2312的安装包名字为“GB2312.gz

/usr/share/i18n/locales(目录) 这个目录下存放了和所有语言包对应的locale信息,例如:zh_CN.GB2312是一个完整的字符集,其中zh表示语言,CN表示这个语言使用的国家,GB2312表示这个语言所对应的编码。/usr/share/i18n/locales下存在的都是类似zh_CN的语言和所在国家的信息。

/usr/lib/locale(目录) 这个目录存放的都是目前操作系统上已经安装好的locale信息。

Linux下安装GB2312的示例
Step 1: 到Linux字符集的安装包目录下
[cd /usr/share/i18n/charmaps]
Step 2: 解压该目录下的GB2312.gz
[gunzip GB2312.gz]
Step 3: 安装字符集 
[localedef -f GB2312 -i zh_CN /usr/lib/locale/zh_CN.GB2312]
Step 4: 查看是否已经定义 
[locale -a | grep GB2312]
Step 5: 安装完毕后,你只要修改/etc/sysconfig/i18n文件就可以修改当前的字符集为新安装的zh_CN.GB2312字符集了

 

2.字体
1)查看字体
fc-list
如果没有这个命令,centos上执行以下命令安装yum install -y fontconfig mkfontscale;在ubuntu上,使用如下命令进行安装sudo apt-get -y install fontconfig xfonts-utils

2)可以在Windows系统中找需要的字体(C:\Windows\Fonts目录),把TTF文件复制到/usr/share/fonts/目录下,没有这个目录可以创建
3)依次使用如下命令安装:
cd /usr/share/fonts/
mkfontscale
mkfontdir
fc-cache

有时候会报命令不存在的问题,就需要安装相应的包了