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

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

[email protected]

上一篇文章中描述了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)。

你可能感兴趣的:(html,算法,null,processing,encoding,attributes)