这几天在折腾短信的发送问题。其实最令人苦恼的是,你明明在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中文乱码...
* 使用 Putty 代替 Secure Shell Client 可以解决中文乱码问题,但不能彻底解决问题。 * 修改 Linux 系统的默认字符集可以彻底解决中文乱码问题。 * 安装 Linux 系统时,采用默认的英文安装,而不要使用中文。 * ...
Linux 下中文乱码问题解决方法 Linux 操作系统中,中文乱码问题是一个常见的问题,它是由系统集成的字符集引起的。由于不能正确地使用相对应字符的字符集,因此 OS 不能识别出文字,导致了乱码。解决这个问题的方法...
Linux 下 Eclipse 中文乱码问题解决方案 Eclipse 中文乱码问题是由于 Eclipse 编辑器选择的编码规则是可变的。一般默认都是 UTF-8 或者 GBK,当从外部导入的一个工程时,如果该工程的编码方式与 Eclipse 中设置的...
在解决问题之前,我们需要先了解几个与乱码问题相关的概念: 1. **环境变量**:在Linux系统中,环境变量用于存储系统运行时所需要的一些配置信息,比如语言环境、字符集等。 2. **字符集**:字符集是字符编码方案的...
本篇文章将详细介绍如何解决在Linux环境下SQL*Plus出现的乱码问题。 首先,我们需要了解Linux系统的字符编码。Linux默认使用UTF-8作为系统编码,而SQL*Plus则可能根据Oracle数据库的字符集进行显示。如果两者不一致...
在Linux系统中,中文乱码问题常常困扰着用户,尤其是对于那些需要处理中文文本的开发者和运维人员。...通过以上方法,一般可以有效避免和解决中文乱码问题,使得在Linux环境中处理中文文本更加顺畅。
本文提供了一个完整的解决方案,旨在帮助用户在保持Linux中文环境的情况下,顺利安装Oracle并解决汉字乱码问题。 首先,我们需要安装Java Development Kit (JDK),因为Oracle数据库的安装和配置过程需要用到JDK。在...
1.由于 firefox 默认是允许网页自己选择字体,在 Linux 上便会出现部分网站的乱码情况。因此可以取消允许页面自己选择字体这个选项便能解决部分乱码情况。 2.倘若还有乱码,以及其他应用程序乱码,则尝试如下...
本文将介绍 Linux 乱码问题的解决方案,包括安装 ibus 输入法、fcitx 输入法、解决 UTF-8 编码问题、解决 Flash 中的中文显示问题、解决 Java 程序中的中文显示问题等。 一、安装 ibus 输入法 在 Ubuntu 系统中,...
标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...
在Linux系统中,处理中文文件名时可能会遇到乱码的问题,这是因为Linux系统默认采用的字符编码与Windows系统不同。在Windows系统中,GBK是常见的字符编码格式,而在Linux系统中,UTF-8是默认的字符编码。当在Linux...
在使用Linux系统的过程中,尤其是对于非英语环境下的用户来说,字符界面(CLI)出现乱码的问题时有发生。例如,在安装Red Hat 9.0时选择了中文作为默认语言,可能会遇到字符界面显示乱码的情况。本文将详细介绍两种...
在Linux环境中安装Oracle数据库并处理汉字乱码问题是一项常见的任务,尤其对于中文用户来说,确保数据库正确显示和处理汉字是至关重要的。以下是一份详细的步骤和解决方案,旨在帮助你克服这个挑战。 首先,我们...
oracle安装界面乱码,因为linux是中文环境,第一种方案可以LANG=en_US ./runInstaller,第二种方案、安装oracle中jre字体库的中文字体:解决Linux下oracle安装界面中文乱码。 在解压出oracle安装包后,找到database/...
本文将深入探讨Linux下网页乱码的解决方案,帮助用户理解和解决这一常见问题。 ### 一、理解网页乱码的原因 网页乱码主要由以下几种情况引起: 1. **字符集不匹配**:网页服务器发送的数据和浏览器接收数据时使用...
在使用C++编程时,遇到Linux系统中处理中文字符出现乱码的问题是一个常见的困扰。这个问题主要涉及字符编码、文件读写、字符串操作以及跨平台兼容性。以下将详细解释这个问题的根源及其解决方案。 首先,我们要了解...
在Linux环境下,BIRT(Business Intelligence and Reporting Tools)图表组件可能会遇到中文乱码的问题,这主要是由于Java虚拟机无法识别到支持中文字符的字体文件所导致。以下是一种解决该问题的详细步骤: 首先,...