android 中国通信乱码问题

1.要解决中文乱码问题。首先得了解什么是字符编码

计算机要处理各种字符,就须要将字符和二进制内码相应起来,这样的相应关系就是字符编码。

要制定字符编码首先要确定字符集,并将

字符集内的字符排序。然后和二进制数字相应起来。依据字符集内字符的多少。确定几个字节来编码。

2.经常使用的字符编码

ASCII 编码是眼下计算机中经常使用的最广泛地 字符集及其编码。

ISO-8859-1能够表示的是西欧语言。看起来非常单一,可是因为是单字节编码,与计算机最基础的表示单位一致,所以在非常多时候。仍旧使用ISO-8859-1编码来表示,并且在非常多协议上默认使用这样的编码。

Unicode编码(统一码),通常所说的UTF-8就是Unicode编码的实现方式。

GB2312字集是简体字集。BIG5字集是台湾繁体字集;GBK字集是简繁字集;GB18030
是国家制定的一个强制性大字集标准;Linux系统默认的使用的是ISO-8859-1编码,。如今的PC平台必须支持GB18030。对嵌入式产品暂不作要求。所以手机、MP3一般仅仅支持GB2312。

3.网络传输产生中文乱码原因

网络通信中,产生乱码的原因主要是通信过程中使用了不同的编码方式:server中的编码方式,传输过程中的编码方式,传输到达终端设备的编码方式。

因此在传输过程中就须要至少两次编码转换:首先从server编码转为网络编码,再从网络编码转为终端设备编码。在转换的过程中出现不论什么情况都可能出现编码混乱。

4.处理中文乱码问题经常使用两种方式解决

(1)因为大部分终端设备都支持Unicode字符集。所以在连接网页时。我们希望网页数据在网络传输时使用UTF-8方式传输,我们就能够将UTF-8转化为Unicode字符集。以下我们将通信过程中得到的流转化为字节。然后再将字节按GB2312 的方式进行转换得到字符串。

InputStream is = conn.getInputStream();

BufferedInputStream bis = new BufferedInputStream(is);

byte bytearray[] = new byte[1024];

int current= -1;

int i=0;

while((current=bis.read())!=-1) {

bytearray[i] =(byte) current;

i++;

}

resultData = new String (bytearray,"GB2312");//网络中以字节想形式默觉得UTF-8进行编码,以GB2312显示到终端

通过上面的转换,“resultData”字符串便能够显示中文效果了。

(2)还有一种方式是书记在传递的过程中使用ISO-8859-1字符集,这样就是直接使用了ASCII编码方式,当然在传递到终端设备时。须要将其数据反转才可以正常的显示。

以下我们将一个字符串按ISO-8859-1字符集进行转换为gbk,代码例如以下:

public static String formatStr(String str){

if(str==null || str.length()==0){

return "";

}

try{

return new String (str.getBytes("ISO-8859-1"),"gbk"); //先在网络中以ISO-8859-1进行编码。再以gbk输出到终端

}

}

总结:归根结底,解决中文乱码仅仅须要两个步骤:

·使用getBytes("编码方式");来对汉字进行重编码。得到它的字节数组。

·再使用new String (Bytes[],"解码");解码相应的字节数组。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-08 13:56:11

android 中国通信乱码问题的相关文章

Android访问服务器(TOMCAT)乱码引发的问题(转载)

Android访问服务器(TOMCAT)乱码引发的问题 1.浏览器往服务器发送的请求主要可分为2种:get.post:delete.head等不赘述. GET方式: 从浏览器上直接敲地址,最大特点就是参数直接跟在地址后面. POST方式:表单提交等. 2.访问过程: 浏览器中输入地址 –> 浏览器对中文进行编码 –>发送到服务器 ->服务器进行解码 如何浏览器编码和服务器解码用的字符集不一致就会发生乱码问题. 3.乱码的解决 默认浏览器使用UTF-8编码(IE默认GBK当然可以通过met

android NFC通信初探一

大家好,经历了3个月的沉寂,我又重新走上了编码的道路上了.这次稍微了解了下android NFC,在这里和大家分享下我所学到的东西.希望和大家一起交流,互相学习,MY QQ IS 1339266784. 一.NFC简介 NFC[1]是Near Field Communication缩写,即近距离无线通讯技术.由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,具有成本低廉.方便易用和更富直观性等特点.可以在移动设备.消费类电子产品.PC 和智能控件工具间进行近距离无线通信.NFC

基于mina的的android即时通信app

前段时间研究mina框架,发现很适合做即时通信后台,经过几个月的研发本人开发了一套基于mina框架的android即时通信app,暂命名为E聊.鉴于本人能力有限还存在不少bug,希望大家原谅并指出,bug和部分功能还在不断完善中,过段时间部分代码会进行开源,敬请关注. 主要功能包括: 1.私聊,群聊 2.支持文字.语音.图片.文件.小视频等 3.位置共享(开发中) 4.朋友圈(图文发布.评论等,小视频功能正在开发中) 5.上线通知,断线重连 6.接收离线消息 7.更多功能正在筹划中... 演示图

Android studio 中文乱码问题解决

针对刚安装好的Android studio, 比如import工程时,你会发现你的很多中文目录显示异常,如下图: 为什么会出现这个问题呢,其实原因很简单,因为Android studio的默认Font并不支持中文. 怎么解决呢,打开settings,如下图: 选择用红色框框起来任意一种,那为啥都是乱码呢,因为这些都是中文字体的格式,所以在你设置之前当然也是显示不了. 或者你也可以选择'simsun'.这个样式也很多人在用. OK,这样就可以了! Android studio 中文乱码问题解决,布

android IPC通信(下)-AIDL

android IPC通信(上)-sharedUserId&&Messenger android IPC通信(中)-ContentProvider&&Socket 这篇我们将会着重介绍AIDL的使用方式和原理,要介绍AIDL先要简单介绍一下Binder,而且Messenger,ContentProvider和AIDL的最底层都是使用的Binder. Binder 直观来说,Binder是Android中的一个类,它实现了IBinder接口.从IPC角度来说,Binder是A

中国通信学会科学技术奖 和 江苏通信行业科技进步奖 申报介绍

一 中国通信学会科学技术奖 每年评选  http://www.china-cic.cn/   (1) 申报时间:以2015年为例,申报时间2015年4月1日-2015年8月31日http://www.china-cic.cn/html/20150324215544.html(2)申报范围信息通信领域的科学理论.科学技术研究.产品开发.工程应用.信息服务.业务创新和科普教育等方面的优秀成果:1.对信息通信领域科技和产业发展具有重大开创性.指导性的理论研究成果.2.为决策科学化和管理现代化而进行创造

Android线程通信

摘要 andriod提供了 Handler 和 Looper 来满足线程间的通信.例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的. 正文 图解: 代码示例: /** * @author allin.dev * http://allin.cnblogs.com */ public class MainThread extends Activity { private static final String TAG = "M

android UDP通信

Android UDP通信很简单的,调用下面这个方法就可以实现客户端和服务端的UDP通信, 只需要把要发给服务器的数据转成一个byte数组格式传进去就行了. /**客户端向服务器端发送UDP数据*/ public static void sendUdpData(final byte[] bytesToSend) { new Thread(){ @Override public void run() { try{ //IP是服务器地址 InetAddress serverAddress = Ine

[转]PHP,Android,IOS通信之AES128加解密

转自:http://s00s10.blog.163.com/blog/static/43988552201411913011459/ android上使用: mcrypt = new MCrypt(); /* 加密*/ String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("需加密的字符") ); /* 解密*/ String decrypted = new String( mcrypt.decrypt( encrypted ) );