android 中文乱码总结

来源:互联网 发布:富贵而知荣辱 编辑:程序博客网 时间:2024/05/16 17:37


1:两端格式对应

URLEncoder.encode("");URLDecoder.decode("");2:按原来的格式转换成 byte 再按需要的格式转换成另一个格式

EncodingUtils.getString(data.getBytes("GB2312"), "UTF-8"); 

result.getBytes("utf-8")

result.getBytes() 是 new String(byte[]) 的逆过程。前面那个是 String->byte[] ,后面那个是 byte[] -> String.在java运行时的时候,String与String是没有区别的都是以2字节的unicode的形式存在内存中,所谓编码,是针对把String转换成 byte[]而言的。比如我可以把 "abc" 通过 utf-8转换成了一串数据 A ,也可以通过gb2312转换成另一串数据 B,这个过程就是 String.getBytes(),比如 "abc".getBytes("utf-8")得到A , "abc".getBytes("gb2312")得到B。如果是"abc".getBytes(),就不知道用的什么编码了,这和平台相关。那如何从A串或者 B串重新得到String呢,那就是 new String(A,"utf-8") 或者 new String(B,"gb2312")。因为A是从utf-8转换得到的,所以用utf-8转回String ,如果new String(A,"gb2312"), 那么其中的中文就是乱码。当然gbk和utf-8的有小部分编码集合是一样的,所以英文字符,一般不管怎么转都可以歪打正着。

另外,因为网络传输肯定是用byte[]的,不可能直接把String对象给传过来,所以server想把某个字符串传给client之前,需要将他转成byte[] , 这中间就用了server指定的一种编码,client在收到这个 byte[]之后,就必须要采用和server相同的编码,把byte[]重新转换为String。这就是InputStreamReader需要指定一个编码的原因。InputStreamReader作用就是在通过inputStream读到byte[]的同时,将byte[]用指定的编码,转换为 char[],也就是实际上的String.

3:设置网络传输格式而不仅仅是本地格式(eclipse编码格式等)。

Andorid,IPHONE的HTTP头。发现其中的content-type 不一样。Andorid :content-type:application/x-www-form-urlencoded;IPHONE:content-type:application/x-www-form-urlencoded; charset=utf-8

于是尝试在请求的时候加个头request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

4:http://blog.csdn.net/shiqidide/article/details/6987449http://hi.baidu.com/wizardchilde/item/6a257c0ecb02cbcd915718275:本人使用的android 通过http 协议传值服务端利用struts2接收中文出现乱码结果过程如下:手机端路径:http://192.168.10.110:8080/wsn_web/register?userInfo.userName=张山"+                                        "&userInfo.userPass=55555"+"&userInfo.sex=男";由于http 传输过程中会把中文转换成ISO8859-1,所以即使你在手机端和服务器端都设成UTF-8可能还会有点问题。解决的问题就是在服务器端再做一次编码转换 如:userInfo.setUserName(new String(userInfo.getUserInfoName().getBytes("ISO8859-1"),"UTF-8"));这样就可以解决问题了。有用的顶起啊!

5:多么操蛋的中文乱码。刚看了下,脑子都大了,以后再说吧!