`
lynen
  • 浏览: 128156 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

通过HttpClient获取数据出现乱码的问题的解决

    博客分类:
  • java
 
阅读更多

通过HttpClient获取数据后,最终解析出来的数据,针对某些请求会出现中文乱码的情况,而有的请求则不会。

检查代码发现

在实现的时候,为避免乱码的问题出现,返回给调用方的是HttpMethod.getResponseBody()这样的字节数据,同时也会将响应结果中的HttpMethodBase.getResponseCharSet()响应编码方式返回给调用方。

调用在在最终使用的过程中是按照如下方式使用的:

 

try {
            return new String(data, offset, length, charset);
        } catch (UnsupportedEncodingException e) {

            if (LOG.isWarnEnabled()) {
                LOG.warn("Unsupported encoding: " + charset + ". System encoding used");
            }
            return new String(data, offset, length);
        }

 

 也就是说,针对返回的结果,调用反为防止乱码的出现已经经过了编码处理。可是针对某些请求,中文仍旧会出现乱码的情况。

 

进一步分析发现,其实在结果返回之前,拿到HttpMethod.getResponseBodyAsString()的时候已经是乱码了。

既:在已经是乱码的情况下,无论经过什么样的处理,最终的结果仍旧是乱码。

 

这样一来,问题可以定位为HttpClient在读取response的内容的时候已经做了一次编码转换。

 

现在对http响应的编码进行分析。http响应的编码有两个部分,response头里的参数和页面开头的meta信息。

例如:浏览器首先是针对response头来设置页面charset的。而httpClient模拟页面也是采用相同方式。所以其实乱码跟meta无关。

解决办法,在连接网络之前,设置请求的编码类型,如下:

 

HttpClient client = ...
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,DEFAULT_REQUEST_CHARSET);

 

分享到:
评论

相关推荐

    彻底解决httpClient乱码问题

    本文将深入探讨如何使用HttpClient来彻底解决乱码问题。 HttpClient是一个功能强大的HTTP客户端,支持多种HTTP协议版本,包括GET、POST等请求方法,以及重试、连接管理等功能。在处理中文字符时,由于编码不一致...

    HttpClient、乱码解决:实例

    通过上述步骤,你应该能有效地解决HttpClient在发送和接收数据时可能出现的乱码问题。在实际项目中,要结合服务器的响应情况灵活调整编码策略,确保数据传输的准确性。同时,了解并熟练掌握HttpClient的使用,对于...

    使用HttpClient获取网页html源代码.zip

    如果网页编码不是GBK,需要根据实际编码来设定,否则可能会出现乱码问题。 最后,我们通常需要关闭HttpEntity和HttpClient以释放资源: ```java EntityUtils.consume(entity); httpClient.getConnectionManager()....

    以httpclient方式提交数据

    在IT行业中,网络通信是应用程序之间交互的重要...通过HttpClient,开发者可以轻松地实现与Web服务的交互,无论是简单的数据获取还是复杂的数据提交。理解和熟练使用HttpClient,是任何Java Web开发者必备的技能之一。

    httpclient模拟post请求json封装表单数据的实现方法

    我们使用 `new StringEntity(jsonParam.toString(), "utf-8")` 创建了一个新的 `StringEntity` 实例,并指定字符编码为 UTF-8,以避免中文乱码问题。 设置 `StringEntity` 的内容类型为 `application/json`,这是...

    HttpClient 4文件上传

    ### HttpClient 4 文件上传知识点详解 #### 一、概述 在Java开发中,经常会遇到需要通过HTTP协议上传文件的需求。Apache HttpClient是一个强大的...同时,需要注意解决中文乱码等问题,以确保数据传输的准确性。

    解决了中文乱码的http的get和post请求demo

    总的来说,解决HTTP请求中的中文乱码问题,核心在于正确地设置编码格式,并在发送请求前对中文数据进行编码。无论是GET还是POST请求,都需要确保客户端和服务器之间对字符编码的一致理解。通过阅读提供的文档和示例...

    一个使用HttpClient调用天气预报接口的例程

    在Android中,如果服务器返回的数据不是UTF-8编码,而使用了GBK,那么在处理文本时需要进行正确的字符编码转换,以防止乱码问题。 5. **源码解析**: - `HttpGet`对象:创建一个HttpGet实例,设置其请求URL,用于...

    httpclient连接第三方接口的实际项目案例

    本案例将详细介绍如何使用HttpClient进行GET和POST类型的请求,以及如何解决在处理过程中可能遇到的文件上传和中文乱码问题。 首先,我们需要导入HttpClient相关的依赖。在Maven项目中,可以在pom.xml文件中添加...

    HttpClient应用实例2

    本实例主要关注如何解决在使用HttpClient进行文件上传时可能出现的乱码问题。 在HttpClient中,乱码问题通常出现在两个方面:请求参数的编码和响应内容的解码。请求参数的编码涉及到URL编码,特别是包含非ASCII字符...

    httpclient

    8. **国际化与编码**:HttpClient支持多种字符集,当处理不同语言的字符串时,需注意正确的字符编码,如UTF-8、GBK等,避免乱码问题。 在文件`my-httpclient-0.0.2.jar`中,可能包含了HttpClient的定制版本或者扩展...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    - 接下来,使用 HttpClient 执行 GET 请求,并获取响应。最后,将响应体转换为 JSON 对象返回。 4. **POST 请求**: - `doPostJson` 方法类似,但使用 `HttpPost` 对象。它创建一个 `HttpPost` 实例,并设置请求...

    Android例子源码使用HttpClient获取网页html源代码.zip

    - 注意处理可能出现的异常,如网络连接问题、超时等。 2. **URLConnection**: URLConnection是Java标准库中的一个类,可以直接用来打开和读取网络资源。使用URLConnection获取HTML源代码通常涉及以下步骤: - ...

    HttpClient学习笔记

    3. **编码解码问题**:处理响应时注意字符编码,防止乱码出现。 总结,HttpClient是Java开发中处理HTTP通信的重要工具,其强大的功能和灵活的配置使其成为开发者的首选。通过深入学习和实践,开发者可以更好地掌握...

    Android学习之HttpClient练习(一)

    然后,我们可以从`HttpResponse`中提取响应数据,例如响应状态码和响应体: ```java StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == ...

    httpclient发送post请求.docx

    获取服务器返回的数据,通常是从`HttpEntity`中提取。`EntityUtils.toString()`方法可以将`HttpEntity`内容转化为字符串,指定字符编码避免乱码问题。 ```java String s = EntityUtils.toString(response.getEntity...

    基于httpClient的文件编码导入系统

    最后,通过HttpClient的execute方法发送请求,并获取服务器响应。 文件编码是一个关键概念,因为不同的文件可能包含不同字符集的数据。在导入系统中,正确识别和处理文件编码至关重要。Java提供了Charset类来处理...

    使用HttpClient获取网页html源代码

    在Android开发中,有时我们需要从网络上获取...以上就是使用HttpClient获取网页HTML源代码的基本过程和相关知识点。在实际开发中,还需要考虑错误处理、异步请求、性能优化等方面的问题,以提高应用的稳定性和效率。

    Java获取网页数据步骤方法详解

    这个过程主要包括使用HttpClient请求网页、获取网页源码、查看源码是否有需要提取的数据、对源码进行拆解、获取需要的数据对自己创建的对象赋值、数据提取保存等步骤。 第一步:通过HttpClient请求到达某网页的url...

Global site tag (gtag.js) - Google Analytics