€的规范理由 到Ÿ 在UTF-8文档中需要浏览器行为

Alo*_*hci 4 html utf-8 windows-1252 character-reference

HTML 4.01规范说为十六进制字符引用

数字字符引用指定文档字符集中字符的代码位置.

因此,如果文档字符集编码是UTF-8,则数字引用应指定Unicode代码点.

HTML5规范说为十六进制字符引用

&符号后面必须跟一个U + 0023 NUMBER SIGN字符(#),后面必须跟一个U + 0078 LATIN SMALL LETTER X字符(x)或U + 0058 LATIN CAPITAL LETTER X字符(X),然后必须跟随一个或多个数字,范围为U + 0030 DIGIT ZERO(0)至U + 0039 DIGIT NINE(9),U + 0061 LATIN SMALL LETTER A至U + 0066 LATIN SMALL LETTER F和U + 0041 LATIN CAPITAL LETTER A到U + 0046 LATIN CAPITAL LETTER F,表示一个基数为16的整数,对应于根据下面定义允许的Unicode代码点.然后必须在数字后跟一个U + 003B SEMICOLON字符(;).

没有提到文档字符集,它只是说数字值标识Unicode代码点.

但似乎所有现代浏览器(我都没有测试过较旧的浏览器)对待€ 通过Ÿ 好像他们正在引用Windows-1252

例如,€ 显示,但U + 0080不是代码点,U + 20AC是.U + 0080的Unicode代码点定义为PAD

€ 也(正确)显示.

这是浏览器的简单实用行为,还是我缺少规范中的理由?

[请注意,十进制字符引用具有相同的行为.为了清晰和一致,我只使用了十六进制的.

Alo*_*hci 5

我找到了问题的答案.它位于HTML5中解析算法的标记化部分,用于使用字符引用,该引用定义了这些字符的映射.