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

原始问题如下:
http://topic.csdn.net/u/20080902/02/a6445aa1-2e6b-45c6-a47c-79009718c0fa.html

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://www.java2000.net/p9226












<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
首先,需要明确的是使用HTTP协议进行通信存在安全风险,建议使用HTTPS协议来保证通信的安全性。另外,用户名和密码应该使用加密算法进行加密存储,以增强安全性。 以下是一个简单的使用HTML和JavaScript实现的登录网页示例,用户名为"admin",密码为"12345",请注意修改为自己的用户名和密码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> <script> function login() { var username = document.getElementById("username").value; var password = document.getElementById("password").value; if (username === "admin" && password === "12345") { alert("登录成功!"); // 在此处可以跳转到其他页面 } else { alert("用户名或密码错误!"); } } </script> </head> <body> <h1>登录</h1> <form> <label for="username">用户名:</label> <input type="text" id="username" name="username"><br><br> <label for="password">密码:</label> <input type="password" id="password" name="password"><br><br> <input type="button" value="登录" onclick="login()"> </form> </body> </html> ``` 在这个示例中,我们使用了HTML的表单元素来获取用户输入的用户名和密码,使用JavaScript编写了一个login函数来验证用户输入的用户名和密码是否正确。如果用户名和密码正确,则弹出一个提示框,显示"登录成功!",否则弹出一个提示框,显示"用户名或密码错误!"。 需要注意的是,这个示例只是一个简单的登录网页示例,实际应用中需要更加严密的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值