这几天在折腾短信的发送问题。其实最令人苦恼的是,你明明在windows环境下一切都测试成功,能成功发送中文短信了,但偏偏你把项目部署到Linux环境的时候,却发现中文短信发出来是避之不及的乱码~~
其实能知道这是由于编码的问题,但要解决它还不太容易呢。
首先,看在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,这与短信正常显示中文所支持的GBK不一致。
到这一步其实有2个思考方向,第一:修改短信发送的代码,在发送内容上修改成这样:
smsContent = new String(smsContent.getBytes(), "gbk");
参考String的编码解码说明:
public byte[] getBytes(String charsetName)
使用指定的字符集将此String编码为byte序列,结果存在一个byte数组中
public String(byte[] bytes, String charsetName)
通过使用指定的 charsetName 解码指定的 byte 数组,构造一个新的 String。
但经测试发现,在Linux上这样改动时,都无法收到短信网关的回复。。更别说中文乱码的问题了。
第二:修改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环境中。
相关推荐
解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码...
linux下中文乱码问题,全面的讲解了linux中文乱码的解决方法,
解决linux环境中出现中文乱码的情况。
1.由于 firefox 默认是允许网页自己选择字体,在 Linux 上便会出现部分网站的乱码情况。因此可以取消允许页面自己选择字体这个选项便能解决部分乱码情况。 2.倘若还有乱码,以及其他应用程序乱码,则尝试如下...
Linux中的中文文件在ssh终端中显示为乱码。原本在Windows中显示正常的文件,上传到Linux中之后,全变成乱码,有什么好的解决方法呢,经过本人多次实验,终于得到一个解决方法
Linux下网页乱码解决方案 Linux下网页乱码解决方案
解决LINUX中中文显示乱码的问题。
birt Chart在Linux下中文乱码解决方案。
oracle安装界面乱码,因为linux是中文环境,第一种方案可以LANG=en_US ./runInstaller,第二种方案、安装oracle中jre字体库的中文字体:解决Linux下oracle安装界面中文乱码。 在解压出oracle安装包后,找到database/...
Ajax中文乱码问题解决方案
Linux上安装Oracle汉字乱码完整解决方案
Linux下安装Oracle中文乱码解决办法 Linux下安装Oracle中文乱码解决办法 Linux下安装Oracle中文乱码解决办法 Linux下安装Oracle中文乱码解决办法 Linux下安装Oracle中文乱码解决办法 Linux下安装Oracle中文乱码解决...
eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的。一般默认都是UTF-8或者GBK...
Linux乱码问题解决方案.docx
51单片机串口发送汉字显示乱码问题
用于 Linux上安装Oracle汉字乱码完整解决方案
解决linux中文乱码,讲述Ubuntu下安装java字体配置
Linux下中文文件名乱码问题的详解 - CSDN博客原创2016年06月12日 09:59:40标签:压缩 / linux / 乱码Linux下中文文件名乱码