android 中文乱码总结

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/6987449
http://hi.baidu.com/wizardchilde/item/6a257c0ecb02cbcd91571827
5:本人使用的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:多么操蛋的中文乱码。刚看了下,脑子都大了,以后再说吧!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值