上次说到了httpclient的编码识别机制是从Http头提取信息。但是它的源码我看的云里雾里,也没有怎么验证过。后来终于发现给出HTTP头的代码。
1 2 3 4 |
Header[] headers = response.getAllHeaders(); for (int i = 0; i < headers.length; i++) { System.out.println(headers[i]); } |
通过这个分析HTTP头,发现确实有不少网站并不返回charset信息的。
先拿百度举例,百度的信息是挺全的:
Date: Mon, 25 Oct 2010 06:32:11 GMT
Server: BWS/1.0
Content-Length: 6218
Content-Type: text/html;charset=gb2312
Cache-Control: private
Expires: Mon, 25 Oct 2010 06:32:11 GMT
Set-Cookie: BAIDUID=0BC71212D53FA68D5095FDD0F21B4986:FG=1; expires=Mon, 25-Oct-40 06:32:11 GMT; path=/; domain=.baidu.com
P3P: CP=” OTI DSP COR IVA OUR IND COM “
Connection: Keep-Alive
然后拿个另外的大网站www.hudong.com,发现就连这个网站信息也不全:
Server: nginx/0.8.50
Date: Mon, 25 Oct 2010 06:33:42 GMT
Content-Type: text/html
Content-Length: 153774
Last-Modified: Mon, 25 Oct 2010 06:31:40 GMT
Connection: close
Accept-Ranges: bytes
看来光是用httpclient自己来识别网站编码是行不通的,只能通过判断 meta 里面的东西来设定了。但问题是这样一来,就要把刚刚摘下来的字符串转码。这对我来说还是比较困难的,得继续研究。
No Comments