android 中文乱码

来源:互联网 发布:淘宝复制宝贝到京东 编辑:程序博客网 时间:2024/05/12 09:08

以HttpPost方式向服务器上提交中文数据时,如果没有设置传输数据的编码类型,在服务端获取到的数据就会出现乱码。在涉及不同平台上的应用,我们尽量使用UTF-8编码格式传输中文数据.

如果服务器端还是受到乱码,那就是服务器端没有处理好转码导致的,直接交给服务器端改就行了,

上次出了个问题,服务器端一直推脱客户端的问题,可把我给整蒙了。

 看了下,http://bashenmail.iteye.com/blog/509046 评论不错,特记录

result = new String(result.getBytes(),"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.
说了一大堆,不知道这表达的你能不能明白

第一句话是错的,而且如果默认不是utf-8那么这就是乱码的一个原因。




 

0 0
原创粉丝点击