html中字符编码的确定算法(二)

本文详细介绍HTML文档中字符编码的确定算法。重点讲解如何通过解析文档内的特定标记来判断字符编码,包括<meta>标签及注释等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html中字符编码的确定算法(二)

tomorrow.cyz@gmail.com

上一篇文章中描述了html字符编码确定的基本算法,本文将详细描述第五条中的文档查找编码算法。

将指针指向输入流的一个字节(开始的时候指向第一个字节)。如果用户代理在这些子步骤的任何时候耗尽字节或者确定扫描更多的字节会没有效率,则跳到整体的文档查找编码算法的下一步。用户代理可能确定扫描任何字节是效率不高的,在这种情况下,这些子步骤完全被调过。
现在,重复下面的两步,直到算法终止(用户代理终止,或者因为发现了character encoding)。

1.如果指针指向:
1.1)‘<!—‘这样的字节序列(0x3C 0x21 0x2D 0x2D) 
则向前推进到’à’(0x2D,0x2D,0x3C)之后的第一个字节。


1.2)‘ <meta’这样的字节序列跟着一个空格或者斜线(0x09,0x0A,0x0C,0x0D,0x20,0x2F) 
1.2.1)推进指针,让它指向下一个0x09,0x0A,0x0C,0x0D,0x2F这样的字节中的一个。 

1.2.2)置空属性列表。 

1.2.3)将got pragma置为false。 

1.2.4)将mode置为null。 

1.2.5)将charset置为null(算法需要,区别于一个无法识别的编码或者空字串)。

1.2.6)Attributes:Get an attribute和它的值。如果没有发现属性,跳到下一步。

1.2.7)如果属性名已经在属性列表中,返回到标记为1.2.6(标记为Attributes)。

1.2.8)匹配属性:如果属性名是”http-equiv”,属性值为”content-type”,则设置got progma为true;如果属性名是”charset”,且charset仍然还为null,设置charset为属性值对应的encoding,并设置mode为“charset”。

1.2.9)返回到1.2.6(标记为Attributes)。

1.2.10)Processing:如果mode为null,跳到(2)。

1.2.11)如果mode是pragma,但是got pragma是false,则跳到(2)。

1.2.12)如果charset是UTF-16 encoding,将值改成charset UTF-8。

1.2.13)如果charset是不支持的charset encoding,则跳转到(2)。

1.2.14)返回charset给出的encoding,以及tentative的confidence,终止这些步骤。


1.3)’<’加上可选的’/’,跟着ascii字母(a-z,A-Z)的序列

1.3.1)推进指针到下一个0x09,0x0a,0x0c,0x0d,0x20,0x3e中的一个字节。

1.3.2)重复get an attribute指到没有再发现更多的属性,然后跳到整体算法的第二步。

1.4)<!

1.5)</

1.6)<? 
推进指针指向<后的第一个>(0x3E)字节。

1.7)其它字节 
什么也不做。

 

2.推进到输入流的下一个字节,继续回到(1)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值