Android部分手机接收服务器数据显示乱码问题

转载请标明出处:http://blog.csdn.net/ysjyygywfn/article/details/39959907


写文章之前先来吐嘈一下,Android手机实在是太多了,各种型号各种android版本,兼容问题真是头大啊!。。。。

好了,现在开始进入主题。最近两个月我做了个项目,我用了十几个手机测都没有问题,发给客户一用,说手机用流量看内容会乱码!我一听当时就蒙了,只能问下会乱码的手机型号,好在在公司员工找到了那同款手机,拿来一测,还真会乱码!用WIFI看不会,用手机流量看就会!然后测试折腾一番,发现从服务器接收的数据就是乱码!在手机上不管怎么转码都是乱码!(说到这里插一句,我们用的最普遍的中文编码是“UTF-8”和“GB2312”,但这两种编码在服务器上(PHP文件)可以互转,在JAVA环境是不可逆的,意思是就是UTF-8转GB2312后,再转成UTF-8就转不回来了,具体大概就是两种编码存储汉字所用字节数不一样,一个是2个字节代表一个字,一个是3个字节代表一个字!详细的大家可以去查下)然后我就从服务器端找问题,发现原来服务器数据库用的是GB2312编码,我们手机APP端用的是UTF-8编码,服务器端做接口的时候做了编码转换!正常情况下我们接收到的JSON数据就是UTF-8编码的,显示也正常,但个别手机就是不行!为什么会这样我到现在也不明白!现在有两种办法解决:

1.在服务器端数据库改用UTF-8,这样就不会出现转码的情况。自然就不会乱码了!

2.服务器端做接口的时候用GB2312编码,不用转码,手机APP端接收的时候转下码,我试了很多方法转码,对大部分手机都可以,但对那些特殊手机都不行,只能用下面那种!关键代码:

	public String loadJSON(String url){
		DefaultHttpClient client = new DefaultHttpClient();		
		HttpGet get = new HttpGet(url);
//		get.setHeaders(headers);
		try {
			HttpResponse response = client.execute(get);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
//				String result = EntityUtils.toString(response.getEntity(),"UTF-8");
				String result = EntityUtils.toString(response.getEntity(),"GBK");
				Log.e("i", "GBK数据="+result);
				
				if (result==null) {
					return "";
				}
				if (result.startsWith("<")) {
					//json数据以"<"开头,返回空字符串
					return "";
				}
				result.trim();
				return result;
			} else {
				Log.e("i", "数据没连上");
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}

这样APP端显示就可以正常了,各种手机都可以显示正常了!不管用WIFI还是手机流量!当然为了避免出现这种情况,建议大家数据库和手机端都用统一的编码,就不会这么多事了!

最后顺便说下常用的字符串转码:

	String str1 = "汉语";//初始编码为“UTF-8”
	String str2 ; //要转换为“GB2312”			
	str2 = new String(str1.getBytes("UTF-8"),"GB2312");
这样转换就实现了把str1的“UTF-8”编码转换成了“GB2312”编码了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值