首页 > 代码库 > Android:解决客户端从服务器上获取数据乱码的方法
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\":\"网络超时!\"}"; } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。