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

HTTP协议请求头和响应头 HTTP请求和相应的内容: HTTP请求包括: 1、请求行:请求的http方法+URL+http的版本号 2、请求头 3、请求体:(key=value) HTTP响应包括: 1、状态行:http协议的版本+状态码+描述 2、响应头 3、响应体:web服务器把要发送给客户端的文档信息放在响应体 http请求头: accept:浏览器通过这个头告诉服务器,它... 阅读详情
原始问题如下:
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" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
ADS2016子电路封装避坑指南:手把手教你制作可复用的自定义Symbol 本文详细介绍了在ADS2016中制作可复用的自定义Symbol的全流程,重点解析了子电路封装的常见问题与解决方案。从电路模块的标准化处理、Hierarchy创建技巧到Symbol视觉优化和库管理策略,帮助工程师提升射频与微波电路设计效率。特别针对Symbol比例适配和引脚优化等核心问题,提供了实用的避坑指南和工程验证方法。 阅读详情

相关推荐

树莓派4B没有serial0或ttyS0,serial0没有映射到ttyS0,serial0和serial1调换映射

环境: 树莓派4B,ubuntu mate20 现象 终端输入ls -l /dev,发现只有serial1->ttyAMA0,没有serial0页没有ttyS0,更没有二者的映射。网上很多方法都是树莓派3B和3B+的,我自己试过,不太适用于4B,下面的方法是4B的,我自己用是成功的。 解决方法 cd /boot/firmware sudo gedit config.txt 注意不是/boot下的config,而是/boot/firmware下的config 打开文件后,找到enable_uart=0

qq_41208487的博客 7892

http协议参数介绍

Accept—-Charset:用于告诉服务器,客户机所采用的编码 Accept—-Encoding:用于告诉服务器,客户机支持的数据压缩格式 Accept—-Language:用于告诉服务器,客户机的语言环境 Host:客户机通过这个头告诉服务器,想访问的主机名 If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间 Referer:客户机通过这个头告诉

代号1998的专栏 748

数字IC面试核心:从MUX基础到Glitch-Free时钟切换电路深度剖析

本文深入剖析数字IC设计中的MUX基础原理及其在Glitch-Free时钟切换电路中的应用。从二选一MUX的门级实现到时钟切换中的毛刺问题,详细讲解了同步切换机制和工程优化技巧,帮助工程师掌握高速时钟电路设计的核心要点。

weixin_42629815的博客 328

Tomcat 访问静态资源html、txt等出现中文乱码及获取Request域中数据乱码解决方案

在Tomcat上部署项目后出现访问静态资源(例如:html文件,txt文件)乱码,主要分两种情况。 非Spring MVC项目 Spirng MVC项目 本文章所使用 Tomcat 版本分别为7.0.100和8.5.54 注意: 本文的 html 文件均带了<meta charset="utf-8">标签如果没带此标签,解析html和解析txt效果一样!! 非Spring MVC项目 在非spring mvc项目中出现访问静态资源乱码,如 txt 文本等,一般都是文件编码为非BOM的UT

Aphadite的博客 3914

深入浅出:CosineLRScheduler 调度器的原理与实战应用

本文深入解析了CosineLRScheduler调度器的核心原理与实战应用,详细介绍了余弦退火算法及其在深度学习模型训练中的优势。通过参数配置建议、PyTorch实现示例和常见问题解决方案,帮助开发者高效应用该调度器提升模型性能,特别适用于计算机视觉和自然语言处理任务。

sss66的博客 859

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7801

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

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

山塘小鱼儿的博客 1982

RK3568移植AP6256

本文主要是记录RK3568移植正基的AP6256的WIFIBT模块,感兴趣的朋友可以一起学习!!!提示:以下是本篇文章正文内容,下面案例可供参考。

qq_24093081的博客 3718

[IT]HTML网页源码的字符编码(charset)解释

当你通过浏览器,打开某个网站,即某个url地址的时候,你所能正常看到网页的内容,各种文字,都可以正常显示,且没有显示乱码。 此过程,涉及到,浏览器帮你正确解析HTML源码,其中涉及到HTML网页源码的字符编码处理方面的问题。 和字符编码处理相关的大概逻辑是: 1.浏览器访问对应的url地址,并获取对应的HTML(或者,以及,其他的css,javascript等)网页源...

SmartSi 638

CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)

CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)

dayuhaitang1的博客 2551

USB驱动(URB)

本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。

m0_49476241的博客 917

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

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

gitblog_00464的博客 733

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

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

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

home9012的专栏 1269

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

gitblog_01166的博客 396

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

gitblog_00364的博客 1108

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

gitblog_01006的博客 328

网络协议(一)应用层(自定制协议、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万+

关于 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

lang和charset的区别

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值