HTML 4.01 spec says for hexadecimal character references
数字字符引用指定字符的代码位置 在文档字符集中。
因此,如果文档字符集编码为UTF-8,则数字引用应指定Unicode代码点。
HTML5 spec says for hexadecimal character references
&符必须后跟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 to U + 0066拉丁文小写字母F和U + 0041拉丁文大写字母A到 U + 0046 LATIN CAPITAL LETTER F,代表一个十六进制整数 对应于根据允许的Unicode代码点 以下定义。然后必须跟随数字U + 003B SEMICOLON字符(;)。
没有提到文档字符集,它只是说数值标识Unicode代码点。
但似乎所有现代浏览器(我还没有测试过旧浏览器)对待€通过Ÿ好像他们正在引用Windows-1252
例如,€显示€
,但U + 0080不是€
的代码点,U + 20AC是。{0}。 U + 0080的Unicode代码点定义为PAD
&安培;#x20AC;也(正确地)显示€
。
这是浏览器的简单实用行为,还是我缺少规范中的理由?
[请注意,十进制字符引用具有相同的行为。为了清晰和一致,我只使用了十六进制的。]
答案 0 :(得分:5)
我找到了问题的答案。它位于HTML5中consume a character reference的解析算法的标记化部分,它定义了这些字符的映射。
答案 1 :(得分:3)