*设为首页
*加入收藏
热门关键字: JAVA
>>当前位置:Java大本营>环境配置>文章内容
从http协议看无法获取网页charset的原因
作者: 发布时间:2008-09-02 10:28:30
html网页的内容大致如下:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type;charset=gb2312/> 

  5. <title>CSDN首页 </title>
  6. ...
  7. </head>
  8. <body>
  9. .....
  10. </html> 

我使用以下语句抓取类似上面的网页:
  1. URL url = new URL("http://www.csdn.net");
  2. HttpURLConnection connection = (HttpURLConnection)url.openConnection();
  3. //建立连接后,使用下面两句取得网页的编码格式
  4. String contentType = connection.getHeaderField("Content-Type");
  5. 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和Hibernatet里面Session的区(09-02)
·Tomcat安装配置 (01-20)
·Windows下JAVA和ANT的环境变量设置 (01-07)
·合Struts+Spring+hibernate加载出错终(01-07)
·Struts环境配置手册[Eclipse] (01-06)
·java环境变量设置参考 (12-08)
·Linux环境下Mysql+Tomcat 配置 (12-05)
·Java获取Html变量的值(12-03)
·java环境变量的配置(12-03)
·java:默认变量初始化(12-03)
·JAVA配置环境变量的设置方法(12-03)
·java如何读取操作系统环境变量(12-03)
复制地址发给您的好友: [推荐文章] [返回顶部] [关闭窗口]
版权所有 Java大本营 1999-2007 转载请注明出处