最近在做一个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
分享到:
- 2008-10-17 18:35
- 浏览 7162
- 评论(2)
- 论坛回复 / 浏览 (2 / 4511)
- 查看更多
相关推荐
在Apache-HTTPClient中可以使用Base64类完成编码操作。 4. 设置请求头:将编码后的字符串添加到HTTP请求的Header中。特别是添加到Authorization头部,它的值应该以"Basic "为前缀,后面跟着Base64编码后的用户名和...
- 在“Raw”模式下查看数据包,该模式显示原始数据,通常不会因编码问题导致乱码。 5. **为何使用某些浏览器(如360、Chrome)时无法抓取数据?** - 确认这些浏览器是否设置了使用IE代理。 6. **如何复制粘贴数据...
为了避免这个问题,应该在完成HTTP请求后,特别是在`try-catch-finally`块的`finally`部分,确保调用`close()`来释放资源。例如: ```java try { // 执行HTTP请求 } catch (Exception e) { // 处理异常 } ...
设置网络超时设置后,请求在设定时间能未完成将被强制终止,保证程序不出现无限制的线程阻塞情况,有效的提高了应用的可用性。 二、未设置超时与设置超时情况对比 在未设置超时的情况下,网络请求可能会出现无限制...
由于科大讯飞官方可能未提供C#的直接示例,我们需要自行构建这个过程。以下是详细的步骤和知识点讲解: 1. **理解Web API接口**: Web API是一种通过HTTP协议提供服务的方式,允许客户端(如C#应用程序)与服务器...
- **读取响应**:使用`InputStream`读取响应数据,注意处理编码问题。 - **关闭连接**:最后记得关闭输入输出流和连接,以释放资源。 3. **HTTP方法与请求头** - **HTTP方法**:GET用于获取资源,POST用于提交...
- **异常处理**:网络爬虫需要处理各种可能出现的问题,如网络错误、编码问题、网页结构变化等。 在“毕业设计”这个标签下,我们可以推测这个项目可能适合计算机科学的学生,作为他们学习和实践网络爬虫技术的一...
如果超过这个时间任务仍未完成,将抛出`TimeoutException`。 4. **数据库连接超时**:在JDBC中,可以通过数据库驱动的特定配置或连接池(如C3P0、HikariCP)设置连接超时,防止长时间未使用的连接占用资源。 5. **...
- **恢复下载**:当应用再次启动时,读取本地保存的下载状态,根据断点位置创建新的下载请求,继续未完成的下载。 - **处理异常情况**:如网络中断,应能自动重试或暂停下载,待网络恢复后再继续。 3. **Eclipse...
- 请求头:可能包含一些与文件下载相关的头信息,比如`Accept-Encoding`表示客户端接受的编码方式,`User-Agent`表示客户端信息等。 2. HTTP响应: - 响应状态码:如200表示成功,302表示重定向,404表示未找到...
6. **进度显示**:虽然在描述中提到未实现联网过程中的转圈功能,但这是一个很好的用户体验改进点。可以通过监听请求的进度,更新UI界面的加载进度条,让用户知道请求的状态。 在实现这个弱联网类时,可以创建一个...
这个模块也支持异步操作,可以在一个请求未完成时发起另一个请求,避免阻塞主线程。 ### 5. 模板引擎 Tornado使用`tornado.template`模块提供模板渲染功能,支持动态HTML页面生成。开发者可以自定义模板语言或使用...
总的来说,Windows Phone获取经纬度和地名的过程涉及启动定位服务,监听位置变化,处理经纬度信息,以及可能的外部API调用来完成地址反编码。开发者需要理解Windows Phone的定位API,以及如何适当地处理用户权限和...
// SD卡未挂载或状态异常,操作... } } }; // 注册和注销广播接收器 registerReceiver(broadcastRec, intentFilter); unregisterReceiver(broadcastRec); ``` 2. **将String转换为char数组**: 在Java中...
这可以通过读取Socket的输入流完成,请求通常是以ASCII编码的文本形式。解析请求行和头部,理解HTTP方法和目标资源,是实现服务器功能的关键步骤。例如,GET请求用于获取资源,POST请求用于提交数据。 接下来,...
在.NET中,这可以通过创建HttpClient实例,设置请求头和Body,然后发送请求来完成。 6. **短信接收**: 接收短信可能需要监听HTTP端点,因为提供商通常会将接收到的短信作为HTTP POST请求发送到指定的回调URL。这...
如果未提供SDK,可以通过HTTP客户端库(如Apache HttpClient)直接调用HTTP API。 4. **编写代码**:在Java代码中,通过SDK或HTTP客户端构造请求,填写必要的参数,如手机号码、短信模板ID、签名等,然后发送请求。...
4. **错误处理**:在实际应用中,你需要考虑网络问题、认证失败、模型未找到等多种可能的异常情况,为它们添加适当的错误处理代码。 5. **图片预处理**:在将图片发送给EasyDL之前,可能需要对其进行预处理,如调整...
- **Base64 编码解码器**:提供了一个内置的Base64编码解码器,简化了常见的编码任务。 - **Process API 的改进**:增强了Process API,使其更好地支持现代操作系统特性。 ### 总结 尚硅谷提供的Java 9学习资源包括...
在配置完成后,我们需要验证配置是否有效。验证方法包括: 1. 通过浏览器直接访问Tomcat服务器上的资源,并使用抓包工具(如Wireshark)观察响应数据包,确认响应头中是否含有“Content-Encoding: gzip”。 2. ...