Android:解决client从server上获取数据乱码的方法
2016-01-20 09:18
435 查看
向server发送HTTP请求。接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了
也无济于事。
想到server好像是用URLENCODER编了码的。怀着试一试的态度在return后面加了条URLDecoder.decode(content,"utf-8");果然有效!
只是还是不太明确URLDecoder.decode(content,"utf-8")和EntityUtils.toString(response.getEntity(),"utf-8")在解码的时候有什么差别。以下是网络端的代码:
String name = new String(response.getBytes("iso-8859-1"), "UTF-8");
也无济于事。
想到server好像是用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\":\"网络超时! \"}"; } }
相关文章推荐
- 使用Qark寻找与 Android 应用相关的安全漏洞
- 主activity与其启动的service的关系
- 推荐几款实用的Android Studio 插件
- 推荐提升 Android 性能的建议
- Android Sqlite 之 getWritableDatabase()和getReadableDatabase()区别
- 《Android源码设计模式解析与实战》读书笔记(二十三)
- Android自助餐之插件化(使用Small框架)
- Android插件实例——360 DroidPlugin详解
- 在 Android* 商务应用中实施地图和地理围栏特性
- 美团Android资源混淆保护实践
- Mac版本Android SDK无法更新问题解决
- Android流式布局实现
- Android targetSdkVersion 原理
- Android asynctask使用
- 在AS中gradle多渠道打包应用
- Android 基本开发流程
- Android 中 SQLite 数据库的查看
- MAC中如何配置两套android-sdk环境
- Android性能分析工具Systrace和TraceView的使用
- Android知识点