首先,看在windows环境下正常显示中文的原因:打开cmd窗口,输入:chcp你会发现输出
活动代码页: 936
查阅936的意义:它指明了当前系统使用的编码,936 代表GBK 扩展的EUC-CN 编码( GB 2312-80编码,包含 6763 个汉字)到Unicode (GB13000.1-93)中定义的20902个汉字,即中国大陆使用的是简体中文zh_CN。
这说明,在windows下是默认采用的gbk方式编码,短信也没有中文乱码。
接下来再看linux环境下的中文编码格式:输入命令cat /etc/sysconfig/i18n
你会发现输出默认为:
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
这说明,Linux默认支持的中文编码为UTF-8,webservice也是以该环境中的编码格式发送的字段。
所以出现了上图中的状况。
解决方式:修改Linux的中文编码。
执行命令:
vi /etc/sysconfig/i18n
将内容替换如下:
LANG="zh_CN.GBK"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
修改保存后运行命令locale发现依然是utf-8编码格式。。
注意,此时不要着急reboot(linux重启系统命令,类似笔记本电脑重启系统,需要一段时间,有造成硬件损坏风险哦),将登陆用户先logout再login(登出后再登入),再次运行locale命令,你会发现被修改成GBK了:
LANG=zh_CN.GBK
LC_CTYPE="zh_CN.GBK"
LC_NUMERIC="zh_CN.GBK"
LC_TIME="zh_CN.GBK"
LC_COLLATE="zh_CN.GBK"
LC_MONETARY="zh_CN.GBK"
LC_MESSAGES="zh_CN.GBK"
LC_PAPER="zh_CN.GBK"
LC_NAME="zh_CN.GBK"
LC_ADDRESS="zh_CN.GBK"
LC_TELEPHONE="zh_CN.GBK"
LC_MEASUREMENT="zh_CN.GBK"
LC_IDENTIFICATION="zh_CN.GBK"
LC_ALL=
但此时你有可能发现打印的日志又乱码了,憋着急,不是说你的系统不支持gbk显示,而是你要修改你ssh客户端的编码跟系统编码gbk一致就ok啦~~~
修改成功之后,经测试,发现通过部署到Linux环境上后,发送的短信中文显示也不乱码了。至于为何手机接收短信不太支持UTF-8,具体原因没有深究。
其实这跟我前段时间做的iReport报表问题差不多,这些问题的出现都是由于windows和linux的一些环境差异造成的。毕竟一般情况下,开发工作是在windows下完成的,然而真正部署上线的是在linux环境中