Android:解决client从server上获取数据乱码的方法
向server发送HTTP请求。接收到的JSON包为response,用String content = 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\":\"网络超时! \"}";
}
}
Android:解决client从server上获取数据乱码的方法的更多相关文章
- 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图
如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?
- HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器传送数据,格式与举例都非常清楚)
HTTP有两部分组成:请求与响应,下面分别整理. 一.HTTP请求 1.HTTP请求格式: <request line> <headers> <blank line> ...
- Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用
大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...
- android中读取SD卡上的数据
通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...
- 解决表单GET提交后台数据乱码问题
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ForeverCjl/article/details/36180933 在页面上提交数据到s ...
- 从BUG工具redmine上获取数据后借助python模块pycha 画出BUG分析类报表
整体代码比较冗长,但是很好读.写的方法全是按照BUG分类去写的.所以写死了,凑合看吧,画出饼图,树状图和生成对应的数据excel,希望大家举一反三能帮助自己分析BUG #__author__ = 'x ...
- android https通过载入pfx证书获取数据
直接给代码吧.研究了几天才搞定...... public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790" ...
- PDO获取数据乱码的解决方法
确保PHP文件编码格式为UTF8 确保数据字段格式为UTF8 PDO中设置编码格式,有如下三种方式: 方式1: 写在初始化dsn中 define( 'DB_DSN', 'mysql:host=loca ...
- Android使用AsyncTask异步线程网络通信获取数据(get json)
摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...
随机推荐
- UISearchBar去除底部黑线问题
有时我们在设置搜索框的时候底部会出现一条黑线,要 去除这黑线只需设置. [self.searchBar setBackgroundImage:[UIImage new]];
- pkg_utility
创建包名: CREATE OR REPLACE PACKAGE BODY PKG_UTILITY AS --字符串转换到索引表 PROCEDURE STR_TO_LIST(PI_STR IN VARC ...
- <climits>头文件使用方法
<climits>头文件定义的符号常量 CHAR_MIN char的最小值SCHAR_MAX signed char 最大值SCHAR_MIN signed char 最小值UCH ...
- 带OpenSSL和MySQL的静态编译版本~
http://www.npcglib.org/~stathis/blog/precompiled-qt4-qt5/ http://www.npcglib.org/~stathis/blog/preco ...
- 感觉Release有时比Debug要健壮
评估文件夹大小的时候,直接跨线程操作UI界面,Debug崩溃,Release不崩溃. 更多的一种情况是,本机DEBUG下不崩溃,把RELEASE版本到别的机子上,立刻崩溃(登录框的进度条的对象为空,仍 ...
- 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法
题目
- 基于visual Studio2013解决C语言竞赛题之0415特殊对数
题目 解决代码及点评 这道题也是锻炼for循环,在for循环中遍历所有可能的数,然后再判断该数是不是有这样的性质 /********************************* ...
- 期权put和call
今天和朋友谈到了FB的期权操作问题,保证一个固定收益或者得到一个以低价买入FB的机会. 首先说下基本概念:call:是指买权put :是指卖权但是这两种期权又分别对应了long和short的两种操作, ...
- eclipse中build workspace的相关优化
网上流传的各种的eclipse的调优的方法都大同小异,但是调优的基本上针对eclipse或者myclipse的本身,比如关掉validate和启动项,文件拼写,和自动构建等,调过之后,等个eclips ...
- mongodb进阶一之高级查询
上篇文章我们讲了mongodb的crud基本操作 http://blog.csdn.net/stronglyh/article/details/46812579 这篇我们来说说mongodb的进阶-- ...