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

时间:2011-12-23 14:52:53

标签: html utf-8 windows-1252 character-reference

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;也(正确地)显示

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

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

2 个答案:

答案 0 :(得分:5)

我找到了问题的答案。它位于HTML5中consume a character reference的解析算法的标记化部分,它定义了这些字符的映射。

答案 1 :(得分:3)

正如我here所做的那样,我再次引用Wikipedia

  

无论页面的编码如何,数字引用始终引用Unicode代码点。除了换行符,制表符和回车符之外,禁止使用引用永久未定义字符和控制字符的数字引用。也就是说,十六进制范围中的字符00-08,0B-0C,0E-1F,7F和80-9F不能在HTML文档中使用,甚至不能通过引用使用,因此™例如是不允许。但是,为了向后兼容忽略此限制的早期HTML作者和浏览器,某些浏览器将80-9F范围内的原始字符和数字字符引用解释为表示映射到Windows-1252编码中字节80-9F的字符。

所以这似乎是一个遗留问题。