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\":\"网络超时!\"}";
		}
}

Android:解决客户端从服务器上获取数据乱码的方法,布布扣,bubuko.com

时间: 2024-08-02 10:55:51

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

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编了码的.怀

ios学习(从网络上获取数据)

从网络上获取数据: 1.从网络上获取数据,采用如下这种方式会带来主线成阻塞现象,主线成主要是负责的是ui的交互(用户输入指令或数据,系统给一个反馈) 会进一步让ui停止交互 1)首先给我们将要下载的图片设置好位置 UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"地址"]]]; UIImageView *imageView = [[UIImageVie

基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息

每次升级,客户端都会获取服务器端存放在upgradefile文件夹下的需要升级的文件和升级信息配置文件(即upgradeconfig.xml文件) 我们来看一下代码 //升级信息配置文件相对应的类 ( 升级信息配置文件是由这个类转化成的) private UpgradeConfig upgradeConfig = null; //客户端存储升级配置文件的地址 是放在客户端根目录下的 (就是把服务器 upgradefile/upgradeconfig.xml下载到客户端存放的位置) string

解决 :Linux服务器上tomcat为java分配的内存不足:PermGen space

在linux 下启动tomcat 的时候 由于项目多,出现 内存不足:PermGen space 而启动不了: 解决方案: 修改TOMCAT_HOME/bin/catalina.sh 在"echo "Using CATALINA_BASE: $CATALINA_BASE""上面加入以下行: JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" 解决

百度搜索效果(服务器来获取数据)

百度搜索效果: AJAX代码: ajax本身不具有跨域功能,所以由服务器来访问数据: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>由服务器来获取数据</title> <style type="text/css"> * { margin: 0; padding: 0; list-style: none; } #

Http Get 从服务器中获取数据 存储到本地

package com.http.get; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.apache.http.message.BasicNameValu

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

?在页面上提交数据到服务器有两种方式"GET"和"POST",当使用"GET"时,传输的数据是直接拼接在URL后面的.当数据中含有对HTML来说不安全的字符例如中文时,就会被编码,一般采用的是UTF-8编码.这时URL已经被转义成相对安全的字符串.此时再经过ios-8859-1的编码方式转换成二进制的形式跟随请求头一起发送到服务器端. ?到达服务器端时,服务器也对数据进行两次解码,服务器先把数据经过ios-8859-1解码,然后根据服务器默认的编

Struts , Jsp 上传数据乱码问题

今天拿出以前的代码,想重构.却发现运行起来都是乱码,原来都是好好的.心里一着急,就上网去搜索答案. 看了一大堆的Struts中文乱码解决办法. 我总结一下,(1)Jsp方面,最好写上<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%> (2) Struts.xml配置上,配置i18n.encoding 属性,值也为UTF-8(最好!) (3) 如果还是不行,则就要自己写

使用cvs或svn从sourceforge上获取开源项目的方法[转载]

著名开源软件网站(www.sourceforge.net)上面的开源项目,大部分使用的管理工具为cvs或svn. 这两种软件的代表客户端程序是wincvs和tortoiseSVN. 1.cvs CVS (Concurrent Versions System) is a tool used by many software developers to manage changes within their source code tree. CVS provides the means to st