HttpClient乱码问题浅析(1)

最近做项目的时候用到httpclient这个东西,但是乱码问题一直困扰着我。

我使用httpclient4进行html的读取,使用的代码如下:

这么一来,htmltext就是网页的内容了。

此处我并没有使用httpget.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, “UTF-8”);这样的代码来进行编码的设定,按照httpclient3的情况,默认是ISO-8859-1,所以按理一定会乱码。然而实际上很多网站不会乱码。说明这个包是有一定的识别编码的方法的。

看了httpcore的源码,确实发现了它能够识别网站编码。它是根据http头返回的信息来识别的。

 

 

大多数正规网站是会返回这个http头的,但是不排除某些野鸡网站没有返回。我碰到的乱码网站无一例外是国内的一些野鸡网站。

现在还没有解决这个问题,我觉得解决思路大致有两种方法。一种是把default charset改成gb2312,因为我的项目针对的是国内网站,这些野鸡网站一般不会去用UTF-8来编码的。当然这个方法局限性很大。另一种方法是在第一种方法的基础上,先将网站内容下载下来,然后用正则表达式去找charset=xxx的语句,根据这个再进行编码转化,这样对于国外的野鸡网站也应该有效果。但是如果碰到连charset也没写的网站,那就没办法了。

 

No Comments

Post a Comment