`

httpclient编码问题(未完成)

    博客分类:
  • Java
阅读更多
最近在做一个httpClient模拟动态操作Web的功能。很正常的遇到了乱码问题,开始没有弄清楚乱码的原因走了很多弯路。终于解决了,记录备忘一下。

首先http响应的编码有两个部分,response头里的参数和页面开头的meta信息。其实浏览器首先是针对response头来设置页面charset的。httpClient模拟页面也是采用相同方式。所以其实乱码跟meta无关。

我们知道String-GBK〉ByteArray-GBK〉String是正确的,但如果我们采用String-GBK〉ByteArray-ISO-8859-1〉String呢?结果就是各种各样的乱码。

所以当httpClient用iso-8859-1读取response的时候已经转换了编码,很可能在这时已经乱码了。此时如果用method.getResponseBodyAsString();获取页面信息的时候再进行转换已经很难还原了。

通常如果要转换编码的时候,我会使用:
String target = new String(orig.getBytes("ISO-8859-1"),"GBK");


解决办法就是使用以下配置。
private static final String CONTENT_CHARSET = "GBK";// httpclient读取内容时使用的字符集

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


其他资料:
http://hi.baidu.com/beyond456/blog/item/1798bfa1607d25884610646c.html
http://www.itpub.net/693874.html
http://www.ibm.com/developerworks/cn/opensource/os-httpclient/
http://read.newbooks.com.cn/info/52828.html
分享到:
评论
2 楼 王者之剑 2008-11-20  
shell+curl
or
ruby+curl
简单一百倍
1 楼 darkjune 2008-11-20  
遇到同样乱码问题, 谢谢!

相关推荐

    JSP开发中Apache-HTTPClient 用户验证的实例详解

    在Apache-HTTPClient中可以使用Base64类完成编码操作。 4. 设置请求头:将编码后的字符串添加到HTTP请求的Header中。特别是添加到Authorization头部,它的值应该以"Basic "为前缀,后面跟着Base64编码后的用户名和...

    Charles_N:HTTP请求响应监听工具

    - 在“Raw”模式下查看数据包,该模式显示原始数据,通常不会因编码问题导致乱码。 5. **为何使用某些浏览器(如360、Chrome)时无法抓取数据?** - 确认这些浏览器是否设置了使用IE代理。 6. **如何复制粘贴数据...

    android开发常用错误集归类.pdf

    为了避免这个问题,应该在完成HTTP请求后,特别是在`try-catch-finally`块的`finally`部分,确保调用`close()`来释放资源。例如: ```java try { // 执行HTTP请求 } catch (Exception e) { // 处理异常 } ...

    Java网络编程教程之设置请求超时的方法

    设置网络超时设置后,请求在设定时间能未完成将被强制终止,保证程序不出现无限制的线程阻塞情况,有效的提高了应用的可用性。 二、未设置超时与设置超时情况对比 在未设置超时的情况下,网络请求可能会出现无限制...

    c# 调用科大讯飞人脸比对webapi接口

    由于科大讯飞官方可能未提供C#的直接示例,我们需要自行构建这个过程。以下是详细的步骤和知识点讲解: 1. **理解Web API接口**: Web API是一种通过HTTP协议提供服务的方式,允许客户端(如C#应用程序)与服务器...

    Java Http编程简单示例

    - **读取响应**:使用`InputStream`读取响应数据,注意处理编码问题。 - **关闭连接**:最后记得关闭输入输出流和连接,以释放资源。 3. **HTTP方法与请求头** - **HTTP方法**:GET用于获取资源,POST用于提交...

    网页爬虫(彬):用 java编写的网络爬虫

    - **异常处理**:网络爬虫需要处理各种可能出现的问题,如网络错误、编码问题、网页结构变化等。 在“毕业设计”这个标签下,我们可以推测这个项目可能适合计算机科学的学生,作为他们学习和实践网络爬虫技术的一...

    超时处理abc

    如果超过这个时间任务仍未完成,将抛出`TimeoutException`。 4. **数据库连接超时**:在JDBC中,可以通过数据库驱动的特定配置或连接池(如C3P0、HikariCP)设置连接超时,防止长时间未使用的连接占用资源。 5. **...

    android,断点下载,杀进程或关Activity继续下载,保证下载速度

    - **恢复下载**:当应用再次启动时,读取本地保存的下载状态,根据断点位置创建新的下载请求,继续未完成的下载。 - **处理异常情况**:如网络中断,应能自动重试或暂停下载,待网络恢复后再继续。 3. **Eclipse...

    http协议下的 文件下载源代码

    - 请求头:可能包含一些与文件下载相关的头信息,比如`Accept-Encoding`表示客户端接受的编码方式,`User-Agent`表示客户端信息等。 2. HTTP响应: - 响应状态码:如200表示成功,302表示重定向,404表示未找到...

    cocos2dx-3.6封装的弱联网类(Http请求)

    6. **进度显示**:虽然在描述中提到未实现联网过程中的转圈功能,但这是一个很好的用户体验改进点。可以通过监听请求的进度,更新UI界面的加载进度条,让用户知道请求的状态。 在实现这个弱联网类时,可以创建一个...

    Tornado使用指南(中文版)

    这个模块也支持异步操作,可以在一个请求未完成时发起另一个请求,避免阻塞主线程。 ### 5. 模板引擎 Tornado使用`tornado.template`模块提供模板渲染功能,支持动态HTML页面生成。开发者可以自定义模板语言或使用...

    windows phone 获取所在经纬度和地名

    总的来说,Windows Phone获取经纬度和地名的过程涉及启动定位服务,监听位置变化,处理经纬度信息,以及可能的外部API调用来完成地址反编码。开发者需要理解Windows Phone的定位API,以及如何适当地处理用户权限和...

    超有用的安卓学习材料6

    // SD卡未挂载或状态异常,操作... } } }; // 注册和注销广播接收器 registerReceiver(broadcastRec, intentFilter); unregisterReceiver(broadcastRec); ``` 2. **将String转换为char数组**: 在Java中...

    计算机网络实验一 Windows环境下用java实现web服务器

    这可以通过读取Socket的输入流完成,请求通常是以ASCII编码的文本形式。解析请求行和头部,理解HTTP方法和目标资源,是实现服务器功能的关键步骤。例如,GET请求用于获取资源,POST请求用于提交数据。 接下来,...

    SMS.zip_receive sms .net

    在.NET中,这可以通过创建HttpClient实例,设置请求头和Body,然后发送请求来完成。 6. **短信接收**: 接收短信可能需要监听HTTP端点,因为提供商通常会将接收到的短信作为HTTP POST请求发送到指定的回调URL。这...

    java发送短信

    如果未提供SDK,可以通过HTTP客户端库(如Apache HttpClient)直接调用HTTP API。 4. **编写代码**:在Java代码中,通过SDK或HTTP客户端构造请求,填写必要的参数,如手机号码、短信模板ID、签名等,然后发送请求。...

    C#easydl定制图片识别.zip

    4. **错误处理**:在实际应用中,你需要考虑网络问题、认证失败、模型未找到等多种可能的异常情况,为它们添加适当的错误处理代码。 5. **图片预处理**:在将图片发送给EasyDL之前,可能需要对其进行预处理,如调整...

    某硅谷java9新特性学习完整视频,课件,源码

    - **Base64 编码解码器**:提供了一个内置的Base64编码解码器,简化了常见的编码任务。 - **Process API 的改进**:增强了Process API,使其更好地支持现代操作系统特性。 ### 总结 尚硅谷提供的Java 9学习资源包括...

    tomcat设置gzip压缩的原理及配置方法

    在配置完成后,我们需要验证配置是否有效。验证方法包括: 1. 通过浏览器直接访问Tomcat服务器上的资源,并使用抓包工具(如Wireshark)观察响应数据包,确认响应头中是否含有“Content-Encoding: gzip”。 2. ...

Global site tag (gtag.js) - Google Analytics