zoukankan      html  css  js  c++  java
  • 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":"网络超时!

    "}"; } }



  • 相关阅读:
    14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp
    14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项
    13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复
    13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令
    12.21 php-fpm的pool 12.22 php-fpm慢执行日志 12.23 open_basedir 12.24 php-fpm进程管理
    12.17 Nginx负载均衡 12.18 ssl原理 12.19 生成ssl密钥对 12.20 Nginx配置ssl
    12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置 12.16 Nginx代理
    在界面workspacebar上添加的OnContextMenu函数打的断点始终进不去,显示当前不会命中断点还未为文档加载任何符号
    VS2019安装闪退, 不出现安装界面,解决办法
    BCGP单元格多列合并需要注意的
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5144042.html
Copyright © 2011-2022 走看看