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

原始问题如下:
http://topic.youkuaiyun.com/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>优快云首页 </title>
  6. ...
  7. </head>
  8. <body>
  9. .....
  10. </html> 

我使用以下语句抓取类似上面的网页:
  1. URL url = new URL("http://www.youkuaiyun.com");
  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 src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
多目标进化算法——NSGA-II(python实现) NSGA-II(python实现)--最全注释,痴呆能懂-- 阅读详情

相关推荐

图像传感器与信号处理——详解CCD与CMOS图像传感器

一文详解CCD与CMOS图像传感器一文详解CCD与CMOS图像传感器1. 图像传感器性能关键词1.1 噪声1.2 暗电流 一文详解CCD与CMOS图像传感器 本文主要总结了CCD与CMOS传感器的原理知识,参考书籍为《数码相机中图像传感器和信号处理》,英文版为《Image Sensors And Signal Processing for Digital Still Cameras》 1. 图像传...

weixin_44580210的博客 2万+

HTTP字符集和字符编码

前言 今天在解析前端工程师

小一的专栏 8860

炸金花游戏(3)--基于EV(期望收益)的简单AI模型

前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运...

weixin_30377461的博客 2343

HttpURLConnection 接收长字符串时出现中文乱码出现问号��

HttpURLConnection 接收长字符串的时候随机位置出现中文乱码,显示问号,究其原因是utf8解码长度问题,程序上写法需要注意,要把字节全部读进来一起转码,不能边读取编转码,会截断中文的字节码,导致转码失败出现问号如:��。这样就不会出现长字符串http传输接收中文��乱码了。

山塘小鱼儿的博客 1982

Tribon Vitesse开发教程(一)

Tribon Vitesse简介 Tribon Vitesse是Tribon提供给Python编程语言的编程接口,它是一系列的API。使用Python的语法调用这些API,结合Python语言自身的语法生成的程序叫做Vitesse程序。Vitesse是法语“速度”的意思,读作“为戴斯”。使用Tribon Vitesse可以直接访问Tribon产品信息模型和使用Tribon应用程序的功能,以控制设计

forevermemory的专栏 2593

从Delta Delay到Timing Window:详解数字芯片后端时序差异的那些坑

本文深入剖析了数字芯片后端设计中,模块级与系统级时序分析结果不一致的核心原因。重点解释了Delta Delay如何导致模块级分析的乐观假设,以及Timing Window(时序窗口)差异如何通过影响串扰噪声计算,在顶层集成时引发新的时序违例,尤其是保持时间问题。文章为工程师提供了从约束建模到签核策略的系统性应对方案。

beer8的博客 500

http请求中Accept-Charset用法

需要注意的是,`Accept-Charset`标头通常用于指定文本内容的字符集编码方式,而不是用于指定请求消息体的字符集编码。对于请求消息体的字符集编码,通常使用`Content-Type`标头中的`charset`参数来指定。总的来说,`Accept-Charset`标头允许客户端告知服务器它所能够接受的字符集编码方式,以便服务器能够提供最合适的响应。通常情况下,`Accept-Charset`标头的值是一个逗号分隔的字符集编码列表,按照客户端偏好的顺序排列。

m0_52656317的博客 2071

自动驾驶仿真(五)—— 基于Carsim、Prescan、Simulink的联合仿真

自动驾驶仿真五——基于Carsim、Prescan、Simulink的联合仿真1. 联合仿真流程2. CarSim联合仿真配置要点3. Prescan联合仿真配置要点4. Carsim、Prescan、Simulink联合仿真结果5. 参考学习的书目教材 博主前面的博文已经介绍了Carsim和Prescan各自与Matlab/Simulink的相关联合仿真应用实例,并且论述过几款软件各自的优势及用法,CarSim适合动力学模型的建立,PreScan适合行车场景的搭建,Simulink适合控制算法的设计及信号

zhudj08的博客 1万+

Chrome-Charset扩展:轻松解决网页编码显示问题

你是否曾经遇到过打开网页时文字显示为乱码的情况?那些奇怪的符号和无法识别的文字让人十分困扰。Chrome-Charset扩展就是专门为解决这类问题而设计的工具,它能够让你手动调整网页的字符编码,确保内容正确显示。 ## 问题根源与解决方案 网页乱码问题通常源于浏览器无法正确识别网页的字符编码。当服务器没有正确设置Content-Type头部,或者网页本身编码设置不当时,就会出现这种情况。 C

gitblog_00464的博客 733

手把手入门YOLO到改进优化教程 | 【P6进阶篇】YOLOv8模型剪枝优化实战-LAMP剪枝

本节首先介绍LAMP剪枝相关理论。然后结合YOLO框架,手把手搭建剪枝工程,包括配置文件修改、剪枝脚本构建等内容。

嵌入式阿齐Archie 2万+

SAP公司间STO业务解析(包含主数据解析、后台配置解析、前台业务演示)

SAP公司间STO业务解析

ww114784的博客 1022

Chrome-Charset:解决网页乱码问题的终极浏览器编码扩展

Chrome-Charset是一个强大的开源浏览器编码扩展,专门解决Chrome浏览器55+版本及基于Chromium内核的浏览器无法手动设置网页编码的问题。当您遇到网页显示乱码、字符显示异常或编码识别错误时,这款扩展程序能够快速帮助您手动调整字符编码,确保网页内容正确显示。 ## 核心功能与安装方法 ### 主要功能特性 - **手动编码设置**:通过右键菜单快速选择网页编码格式 - **智

gitblog_01166的博客 396

11 指挥AI写C语言/嵌入式基础代码,适配硬件与底层逻辑

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十一篇,正式进入第三阶段多场景实战环节。聚焦**C语言/嵌入式基础代码**生成,结合嵌入式开发的核心需求,讲解如何精准编写指令,指挥AI生成适配硬件、贴合底层逻辑的C语言代码,覆盖嵌入式常用底层功能、硬件适配要点、代码规范,搭配完整指令模板、AI输出示例与实操校验方法,零基础也能快速指挥AI完成嵌入式基础开发,无需死记硬背C语言底层语法。

coreopt的博客 141

Asp.net中Response.Charset 与Response.ContentEncoding区别

Response.Charset   ASP.NET 中示例: CodePage 告诉 IIS 按什么编码来读取 QueryString,按什么编码转换数据库中的内容…… Response.ContentEncoding 获取或设置输出流的 HTTP 字符集。 Response.Charset 获取或设置输出流的 HTTP 字符集。微软对 ContentEncoding、Chars

home9012的专栏 1269

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Chrome-Charset终极指南:一键解决网页乱码的必备神器

你是否曾经遇到过这样的情况:打开一个网页,看到的却是满屏的乱码字符,像天书一样难以理解?或者浏览某些老网站时,文字显示得支离破碎?这些令人头疼的网页编码问题,现在有了终极解决方案!Chrome-Charset浏览器编码扩展,让你轻松告别乱码困扰,享受流畅的网页浏览体验。 ## 🔍 为什么会出现网页乱码? 网页乱码的根本原因是字符编码不匹配。简单来说,就像两个说不同语言的人在交流,如果翻译不对

gitblog_00364的博客 1108

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Chrome-Charset终极指南:如何一键解决网页乱码问题

你是否曾经遇到过网页显示乱码的情况?那些令人头疼的方块、问号或奇怪的字符,让人无法正常浏览网页内容。Chrome-Charset正是为解决这一问题而生的强大工具!🚀 这款专为Chromium内核浏览器设计的扩展程序,能够智能修改页面编码,让你告别网页乱码的困扰。 ## 什么是Chrome-Charset扩展? Chrome-Charset是一个轻量级浏览器扩展,专门用于修改网页的默认字符编码

gitblog_01006的博客 328

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

网络协议(一)应用层(自定制协议、HTTP协议、HTTPS协议)

应用层:负责应用程序之间的数据沟通 一、自定制协议(私有协议) 二、HTTP协议 1)、请求行解析:GET /index.html HTTP/1.1 第一部分:请求方法:多种多样,描述不同的请求目的 第二部分:URL 第三部分:协议版本 2)请求头部 3)空行 4)正文: 5)响应行 三、Cookie 与 Session 四、HTTPS协议

曾几何时的博客 2387

HTTP协议与攻击

以下内容为阅读《图解HTTP》后整理 文章目录Web基础TCP/IPHTTP协议概念HTTP协议是个无状态协议HTTP方法持久连接节省通信量Cookie状态管理HTTP报文内的HTTP信息 Web基础 首先总所周知,HTTP是建立在TCP/IP之上的,也就是说,HTTP是TCP/IP的一个子集。 TCP/IP TCP/IP分四层:应用层、传输层、网络层、数据链路层。 而网络是分七层协议:7 应用层...

NickWU博客 1万+

HTTP 协议

HTTP 是什么:客户端与服务器的通信协议,无连接、无状态;URL 结构:从协议到片段标识符,特殊字符需要 urlencode;请求响应格式:4 部分组成,空行是关键分隔;方法与状态码:GET 获取、POST 提交,200 成功、404 找不到;Header 作用:Content-Type 定义数据类型,Cookie 解决无状态;HTTPS 安全:加密层 + 证书,防止数据泄露和篡改。

w8848w的博客 1292

关于 meta http-equiv="content-type" content="text/html; charset=utf-8" /和meta charset="utf-8"之间的不同

meta http-equiv=“content-type” content=“text/html; charset=utf-8” / 和 meta charset=“utf-8” 关于这个问题,我在以前就觉得看到网页上各种各样的格式都有,甚至有的网页并没有这一串代码,或者UTF-8换成了GB2312 从很多的教学网站上能够看到以下类似解释: 使用 http-equiv 已经不是规定 HTML 文...

wouldmissy的博客 1万+

lang和charset的区别

具体写法 总体写法<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> lang表示内容语言,charset表示文档编码 </body&...

妖怪的博客 1250

关于 meta http-equiv=“content-type“ content=“text/html; charset=utf-8“ /和meta charset=“utf-8“之间的不同

meta http-equiv=“content-type” content=“text/html; charset=utf-8” / 和 meta charset=“utf-8” 关于这个问题,我在以前就觉得看到网页上各种各样的格式都有,甚至有的网页并没有这一串代码,或者UTF-8换成了GB2312 从很多的教学网站上能够看到以下类似解释: 使用 http-equiv 已经不是规定 HTML 文档的字符集的唯一方式: HTML 4.01:meta http-equiv=“content-type” c

MaNong125的博客 2888

java 获取网页编码_spider JAVA如何判断网页编码

前言最近做一个搜索项目,需要爬取很多网站获取需要的信息。在爬取网页的时候,需要获得该网页的编码,不然的话会发现爬取下来的网页有很多都是乱码。分析一般情况下,网页头信息会指定编码,可以解析header或者meta获得charset。但有时网页并没没有指定编码,这时就需要通过网页内容检测编码格式,通过调研,最好用的还是cpdetector。cpdetector自动检测文本编码格式,谁先返回非空,就以该...

weixin_42516642的博客 225
上一篇: 关于Http和Hibernatet里面Session的区别
下一篇: 这一周的安排有点紧张啊
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值