快速业务通道

从http协议看无法获取网页charset的原因 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

从http协议看无法获取网页charset的原因

时间:2011-02-01 csdn博客 赵学庆

原始问题如下:

http://topic.csdn.net/u/20080902/02/a6445aa1-2e6b-45c6-a47c-79009718c0fa.html

html网页的内容大致如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type;charset=gb2312" /> <title>CSDN首页 </title> ... </head> <body> ..... </html>

我使用以下语句抓取类似上面的网页:

URL url = new URL("http://www.csdn.net"); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //建立连接后,使用下面两句取得网页的编码格式 String contentType = connection.getHeaderField("Content-Type"); contentType = connection.getContentType();

无论是哪一句,得到的contentType的值都是text/html,而不包含后面的charset=gb2312,这是为什么?

我注意到一个问题,content="text/html; charset=gb2312"这里,在;和charset之间有一个空格,是否因为这个空格的缘故,而不能得到content-type的准确值

还有没有其他的办法可以得到页面的编码字符集?

回答:

connection.getContentType();

这个需要服务器设置了 ContentType才可以,这个数据在文件头里面,而不是在文件的主体(也就是你看到的html)里面。

所以检测页面类型需要分3步,如果这一步不行,则用下一个

1 看header里面的ContentType,也就是你用的那个方法

2 看 html 里面的 ContentType ,也就是解析html页面

3 对html数据进行自动评估,类似于it里面的自动检测编码类型。

一段典型的返回信息的Header数据

HTTP/1.1 200 OK

Date: Mon, 01 Sep 2008 23:13:31 GMT

Server: Apache/2.2.4 (Win32) mod_jk/1.2.26

Vary: Host,Accept-Encoding

Set-Cookie: JAVA2000_STYLE_ID=1; Domain=www.java2000.net; Expires=Thu, 03-Nov-2011 09:00:10 GMT; Path=/

Content-Encoding: gzip

Transfer-Encoding: chunked

Content-Type: text/html;charset=UTF-8

<html>

。。。。从这里开始是数据的本体

此文收藏于:http://www.java2000.net/p9226

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号