Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了
        String name = new String(response.getBytes("iso-8859-1"), "UTF-8");  

也无济于事。想到服务器好像是用URLENCODER编了码的,怀着试一试的态度在return后面加了条URLDecoder.decode(content,"utf-8");果然有效!不过还是不太明白URLDecoder.decode(content,"utf-8")和EntityUtils.toString(response.getEntity(),"utf-8")在解码的时候有什么区别。下面是网络端的代码:

package com.trilink.ibeaconlocationdisplay.utils;

import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.util.EntityUtils;

import android.util.Log;


public class NetworkService {

	private static String TAG = "NetworkService";
	
	//private static String url_ip = ServerUrl.SERVER_ADRESS+"UserInfoServlet?";
	//private static String url_ip = "http://192.168.1.231:8080/indoor/";
	
	/**
	 * 释放资源
	 */
	public static void cancel() {
		Log.i(TAG, "cancel!");
		// if(conn != null) {
		// conn.cancel();
		// }
	}
	//无参数传递的
		public static String getPostResult(String url){			
			//创建http请求对象
			HttpPost post = new HttpPost(url);			
			//创建HttpParams以用来设置HTTP参数
	        BasicHttpParams httpParams = new BasicHttpParams();
			HttpConnectionParams.setConnectionTimeout(httpParams,10 * 1000);
			HttpConnectionParams.setSoTimeout(httpParams, 10 * 1000);
			//创建网络访问处理对象
			HttpClient httpClient = new DefaultHttpClient(httpParams);
			try{
				//执行请求参数
				HttpResponse response = httpClient.execute(post);
				//判断是否请求成功
				if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					//获得响应信息
					String content = EntityUtils.toString(response.getEntity());
					return URLDecoder.decode(content,"utf-8");
				}
			}catch(Exception e) {
				e.printStackTrace();
				return "{\"status\":405,\"resultMsg\":\"网络超时!\"}";
			} finally {
				//释放网络连接资源
				httpClient.getConnectionManager().shutdown();
			}
			return "{\"status\":405,\"resultMsg\":\"网络超时!\"}";			
		}
	   //有参数传递的
		public static String getPostResult(String url, List<NameValuePair> paramList){
			UrlEncodedFormEntity entity = null;
			try {
				entity = new UrlEncodedFormEntity(paramList,"utf-8");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}			
			//创建http请求对象
			HttpPost post = new HttpPost(url);
			BasicHttpParams httpParams = new BasicHttpParams();			
			HttpConnectionParams.setConnectionTimeout(httpParams, 10 * 1000);
			HttpConnectionParams.setSoTimeout(httpParams, 10 * 1000);
			post.setEntity(entity);
			//创建网络访问处理对象
			HttpClient httpClient = new DefaultHttpClient(httpParams);
			try{
				//执行请求参数
				HttpResponse response = httpClient.execute(post);
				//判断是否请求成功
				if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
					//获得响应信息
					String content = EntityUtils.toString(response.getEntity(),"UTF-8");
                                        return URLDecoder.decode(content,"utf-8");                  
                      				}				
			}catch(Exception e) {
				e.printStackTrace();
				return "{\"status\":405,\"resultMsg\":\"网络超时!\"}";
			} finally {
				//释放网络连接资源
				httpClient.getConnectionManager().shutdown();
			}
			return "{\"status\":405,\"resultMsg\":\"网络超时!\"}";			
		}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值