从http协议看无法获取网页charset的原因
2008-09-02 07:17
155 查看
原始问题如下:
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: J***A2000_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://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: J***A2000_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
相关文章推荐
- 上传大文件出现“网页无法显示”的问题原因及解决方案
- 使用OLEDB连接Oracle数据库无法获取对象属性的原因
- multipart/form-data 文件上传表单中 传递参数无法获取的原因!
- 导致微信公众平台设置网页授权域名“无法访问xxx指向的web服务器(或虚拟主机)的目录,请检查网络设置”的一种原因
- IE无法打开网页的常见原因及解决
- IE无法浏览网页的常见原因及解决方法
- 为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢?这就表明mp4格式文件是服务器无法识别的,其实,这是没有在iis中将相应的MIME类型进行设置的原因。那该怎样设置MIME
- 偶然发现关于网页JavaScript脚本无法正常执行的原因
- cookieless为true时,Request.Form无法获取htm表单数据的原因及解决方案
- C#中的ashx文件,用到Session,但是总无法获取Session,经过调试,出现的错误的原因:
- 网卡无法自动获取IP地址的原因及解决方法
- 虚拟机无法DHCP获取IP原因之一
- DOCKER 无法获取使用宿主机DNS 的原因,解决方法
- 部分小程序无法获取UnionId原因
- http协议-C#获取网页源代码
- IE无法打开网页的常见原因及解决
- 偶然发现关于网页JavaScript脚本无法正常运行的原因
- 利用C语言获取网页源代码(待研究,HTTP协议)
- IE无法打开网页的原因
- hadoop 8088端口网页无法打开的原因分析