向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上获取数据乱码的方法的更多相关文章

  1. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  2. HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器传送数据,格式与举例都非常清楚)

    HTTP有两部分组成:请求与响应,下面分别整理. 一.HTTP请求 1.HTTP请求格式: <request line> <headers> <blank line> ...

  3. Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...

  4. android中读取SD卡上的数据

    通过Context的openFileInput或者openFileOutput打开的文件输入输出流是操作应用程序的数据文件夹里的文件,这样存储的大小比较有限,为了更好的存取应用程序的大文件数据,应用程 ...

  5. 解决表单GET提交后台数据乱码问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ForeverCjl/article/details/36180933     ​在页面上提交数据到s ...

  6. 从BUG工具redmine上获取数据后借助python模块pycha 画出BUG分析类报表

    整体代码比较冗长,但是很好读.写的方法全是按照BUG分类去写的.所以写死了,凑合看吧,画出饼图,树状图和生成对应的数据excel,希望大家举一反三能帮助自己分析BUG #__author__ = 'x ...

  7. android https通过载入pfx证书获取数据

    直接给代码吧.研究了几天才搞定...... public static final String CLIENT_KET_PASSWORD = "Ku6OpqKDfN4=305790" ...

  8. PDO获取数据乱码的解决方法

    确保PHP文件编码格式为UTF8 确保数据字段格式为UTF8 PDO中设置编码格式,有如下三种方式: 方式1: 写在初始化dsn中 define( 'DB_DSN', 'mysql:host=loca ...

  9. Android使用AsyncTask异步线程网络通信获取数据(get json)

    摘要: android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法. 内容: 1.添加Ht ...

随机推荐

  1. A - Prime Ring Problem(素数环,深搜,打表)

    Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into ...

  2. python学习(一)

    1 python一切皆为对象,因为现实 包含了一系列的数据和操作这些数据的方法的一个整体,就叫作对象. 自行车 属性:手刹车,轮胎,脚踏板方法:如何前进的方法,控制停止的方法,控制方向 实际内容 男人 ...

  3. nginx+apache 404错误页面

    公司新系统  随风做的  给客户演示出错不想让客户看到   自动返回上一页面. 刚开始按照网上说的 在nginx 处理: # 定义错误提示页面 error_page 500 502 503 504 / ...

  4. ZOJ 3203 Light Bulb - 求导求最大值

    如果L全在地面上: 输出 h * D / H 如果L全在墙上: 输出 h 否则: (D - X ) / X = Y / (H - h) L = D - X + h - Y 然后对L求导即可 #incl ...

  5. SUP (SAP Mobile SDK 2.2) 连接 Sybase SQL Anywhere sample 数据库

    安装了   SAP Mobile SDK 2.2   后发现,这个版本没有自带Sybase SQL Anywhere  数据库. 解决办法: 1. 免费下载 SQL Anywhere Develope ...

  6. 基于visual Studio2013解决C语言竞赛题之0502最小数替换

         题目

  7. Eclipse中JBOSS5.1无法启动的问题解决办法

    今天在Eclipse中启动JBoss 5.1时遇到这样的一个错误: …… ERROR [AbstractKernelController] Error installing to Instantiat ...

  8. CentOS 漏洞修补

    以前没注意 今后得实时更新系统漏洞和补丁了! 1.Bash软件安全漏洞检测及解决方案 http://netsecurity.51cto.com/art/201409/452322.htm

  9. 【转】如何在CentOS/RHEL中安装基于Web的监控系统 linux-das

    Linux-dash是一款为Linux设计的基于Web的轻量级监控面板.这个程序会实时显示各种不同的系统属性,比如CPU负载.RAM使用率.磁盘使用率.网速.网络连接.RX/TX带宽.登录用户.运行的 ...

  10. 新浪微博中tableview中头部信息

    摘自http://www.cnblogs.com/gcb999/p/3151665.html #import <UIKit/UIKit.h> @class User; @protocol ...