文档章节

httpmime android 乱码解决

塔塔米
 塔塔米
发布于 2014/04/19 15:28
字数 842
阅读 140
收藏 2

http://www.eoeandroid.com/thread-195360-1-1.html

这个最好用

http://www.eoeandroid.com/thread-195360-1-1.html

entity.addPart("addasda", new StringBody(xxx,Charset.forName("UTF-8")));



别用过时的东西,用新的好了

http://blog.csdn.net/zhouzme/article/details/18940279

package com.ai9475.util;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * Created by ZHOUZ on 14-2-3.
 */
public class ZHttpRequest
{
    protected String url = "";

    protected Map<String, String> headers = null;

    protected int connectionTimeout = 5000;

    protected int soTimeout = 10000;

    protected int statusCode = 200;

    protected String charset = HTTP.UTF_8;

    protected HttpGet httpGet;

    protected HttpPost httpPost;

    protected HttpParams httpParameters;

    protected HttpResponse httpResponse;

    protected HttpClient httpClient;

    protected String inputContent;

    /**
     * 设置当前请求的链接
     *
     * @param url
     * @return
     */
    public ZHttpRequest setUrl(String url)
    {
        this.url = url;
        return this;
    }

    /**
     * 设置请求的 header 信息
     *
     * @param headers
     * @return
     */
    public ZHttpRequest setHeaders(Map headers)
    {
        this.headers = headers;
        return this;
    }

    /**
     * 设置连接超时时间
     *
     * @param timeout 单位(毫秒),默认 5000
     * @return
     */
    public ZHttpRequest setConnectionTimeout(int timeout)
    {
        this.connectionTimeout = timeout;
        return this;
    }

    /**
     * 设置 socket 读取超时时间
     *
     * @param timeout 单位(毫秒),默认 10000
     * @return
     */
    public ZHttpRequest setSoTimeout(int timeout)
    {
        this.soTimeout = timeout;
        return this;
    }

    /**
     * 设置获取内容的编码格式
     *
     * @param charset 默认为 UTF-8
     * @return
     */
    public ZHttpRequest setCharset(String charset)
    {
        this.charset = charset;
        return this;
    }

    /**
     * 获取 HTTP 请求响应信息
     *
     * @return
     */
    public HttpResponse getHttpResponse()
    {
        return this.httpResponse;
    }

    /**
     * 获取 HTTP 客户端连接管理器
     *
     * @return
     */
    public HttpClient getHttpClient()
    {
        return this.httpClient;
    }

    /**
     * 获取请求的状态码
     *
     * @return
     */
    public int getStatusCode()
    {
        return this.statusCode;
    }

    /**
     * 通过 GET 方式请求数据
     *
     * @param url
     * @return
     * @throws IOException
     */
    public String get(String url) throws IOException
    {
        // 设置当前请求的链接
        this.setUrl(url);
        // 实例化 GET 连接
        this.httpGet = new HttpGet(this.url);
        // 自定义配置 header 信息
        this.addHeaders(this.httpGet);
        // 初始化客户端请求
        this.initHttpClient();
        // 发送 HTTP 请求
        this.httpResponse = this.httpClient.execute(this.httpGet);
        // 读取远程数据
        this.getInputStream();
        // 远程请求状态码是否正常
        if (this.statusCode != HttpStatus.SC_OK) {
            return null;
        }
        // 返回全部读取到的字符串
        return this.inputContent;
    }

    public String post(String url, Map<String, String> datas, Map<String, String> files) throws IOException
    {
        this.setUrl(url);
        // 实例化 GET 连接
        this.httpPost = new HttpPost(this.url);
        // 自定义配置 header 信息
        this.addHeaders(this.httpPost);
        // 初始化客户端请求
        this.initHttpClient();
        Iterator iterator = datas.entrySet().iterator();
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntityBuilder.setCharset(Charset.forName(this.charset));
        // 发送的数据
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator.next();
            multipartEntityBuilder.addTextBody(entry.getKey(), entry.getValue(), ContentType.create("text/plain", Charset.forName(this.charset)));
        }
        // 发送的文件
        if (files != null) {
            iterator = files.entrySet().iterator();
            while (iterator.hasNext()) {
                Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator.next();
                String path = entry.getValue();
                if ("".equals(path) || path == null) continue;
                File file = new File(entry.getValue());
                multipartEntityBuilder.addBinaryBody(entry.getKey(), file);
            }
        }
        // 生成 HTTP 实体
        HttpEntity httpEntity = multipartEntityBuilder.build();
        // 设置 POST 请求的实体部分
        this.httpPost.setEntity(httpEntity);
        // 发送 HTTP 请求
        this.httpResponse = this.httpClient.execute(this.httpPost);
        // 读取远程数据
        this.getInputStream();
        // 远程请求状态码是否正常
        if (this.statusCode != HttpStatus.SC_OK) {
            return null;
        }
        // 返回全部读取到的字符串
        return this.inputContent.toString();
    }

    /**
     * 为 HTTP 请求添加 header 信息
     *
     * @param request
     */
    protected void addHeaders(HttpRequestBase request)
    {
        if (this.headers != null) {
            Set keys = this.headers.entrySet();
            Iterator iterator = keys.iterator();
            Map.Entry<String, String> entry;
            while (iterator.hasNext()) {
                entry = (Map.Entry<String, String>) iterator.next();
                request.addHeader(entry.getKey().toString(), entry.getValue().toString());
            }
        }
    }

    /**
     * 配置请求参数
     */
    protected void setParams()
    {
        this.httpParameters = new BasicHttpParams();
        this.httpParameters.setParameter("charset", this.charset);
        // 设置 连接请求超时时间
        HttpConnectionParams.setConnectionTimeout(this.httpParameters, this.connectionTimeout);
        // 设置 socket 读取超时时间
        HttpConnectionParams.setSoTimeout(this.httpParameters, this.soTimeout);
    }

    /**
     * 初始化配置客户端请求
     */
    protected void initHttpClient()
    {
        // 配置 HTTP 请求参数
        this.setParams();
        // 开启一个客户端 HTTP 请求
        this.httpClient = new DefaultHttpClient(this.httpParameters);
    }

    /**
     * 读取远程数据
     *
     * @throws IOException
     */
    protected void getInputStream() throws IOException
    {
        // 接收远程输入流
        InputStream inStream = this.httpResponse.getEntity().getContent();
        // 分段读取输入流数据
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        int len = -1;
        while ((len = inStream.read(buf)) != -1) {
            baos.write(buf, 0, len);
        }
        // 将数据转换为字符串保存
        this.inputContent = new String(baos.toByteArray());
        // 数据接收完毕退出
        inStream.close();
        // 获取请求返回的状态码
        this.statusCode = this.httpResponse.getStatusLine().getStatusCode();
    }

    /**
     * 关闭连接管理器释放资源
     */
    protected void shutdownHttpClient()
    {
        if (this.httpClient != null && this.httpClient.getConnectionManager() != null) {
            this.httpClient.getConnectionManager().shutdown();
        }
    }
}



本文转载自:http://blog.csdn.net/zhouzme/article/details/18940279​

共有 人打赏支持
塔塔米
粉丝 11
博文 578
码字总数 15671
作品 0
朝阳
程序员
Android http中文乱码问题

总结下android下的中文乱码问题,以后开发东西基本就在这里写了。一是通过javaeye能认识不少朋友。二是对自己的博客内容进行管理。三是平时日志在sina的博客里写吧。 一 url to android JAV...

xiahuawuyu
2012/10/11
0
0
Android中腾讯微博OAuth认证(一)---获取RequestToken

Java新手,Java中的很多网络操作都不太熟悉,所以想写一个微博程序来熟悉下Java中的网络操作。 第一步:下载腾讯微博SDK 第二步:创建Android项目,并配置Build Path,加入SDK中httpmime-4....

Easince
2012/06/13
0
0
第一个PhoneGap程序以及错误解决

新建一个Android工程。 2.将PhoneGapphonegap-2.9.0libandroid下的cordova-2.9.0.jar拷贝到Android工程下的libs下。 3.在assets文件夹下建一个新的文件夹www 4.将PhoneGapphonegap-2.9.0lib...

崔同亮
2014/06/08
0
0
Android WebView出现的乱码问题

1、webview加载网页<html>源码乱码问题 一、webView.loadUrl(); 直接显示网页内容(单独显示网络图片),一般不会出现乱码。 二、webView.loadData(data, "text/html", "UTF-8"); loadData主要...

当空皓月
2015/01/05
0
5
AndroidStudio试用

新建TestStudio工程, Failed to import new Gradle project: Could not fetch model of type 'IdeaProject' 发现总是提示Download,而且很久,于是进入工程目录,在控制台下运行gradlew.bat文件...

木头r
2013/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python标准输入输出

input() 读取键盘输入 input() 函数从标准输入读入一行文本,默认的标准输入是键盘。 input 可以接收一个Python表达式作为输入,并将运算结果返回。 print()和format()输出 format()输出...

colinux
19分钟前
0
0
Python 核心编程 (全)

浅拷贝和深拷贝 1.浅拷贝:是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容。相当于把变量里面指向的一个地址给了另一个变量就是浅拷贝,而没有创建一个新的对象,如a...

代码打碟手
32分钟前
0
0
PHP 对象比数组省内存?错!数组比对象省内存?错!

刚刚一个群里有人引出了 PHP 数组和对象占用内存谁多谁少的问题。我想起之前我好像也测试过这个问题,和群里人说的对象比数组节省内存的结论相反,我得出的是数组比对象节省内存。 但今天,我...

宇润
48分钟前
1
0
memcached命令行及其用法

21.5 memcached命令行 创建数据 yum install -y telnet 利用telnet命令连接memcached数据库 telnet 127.0.0.1 11211 #写入数据 set key2 0 30 212STORED 这个是错误的示范,因为0 30 已经...

lyy549745
48分钟前
0
0
Maven私服

Maven私服 一、简介 当多人项目开发的时候,尤其聚合项目开发,项目和项目之间需要有依赖关系,通过maven私服,可以保存互相依赖的jar包,这样的话就可把多个项目整合到一起。 如下图: Inst...

星汉
51分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部