为何Unicode微符号U+00B5不属于合法XML NameChar?
问题解答
这并非疏漏,而是XML规范基于Unicode字符属性的有意设计,原因如下:
XML NameChar的核心规则
XML 1.0(及后续版本)对NameChar的定义严格遵循Unicode字符的分类属性,仅允许以下几类字符:- 字母类(Letter,包括各种语言的大小写字母)
- 标记类(Mark,比如重音符号)
- 数字类(Number)
- 连接标点类(Connector_Punctuation,如下划线
_) - 特定的少量符号(如冒号
:、连字符-等)
两个字符的Unicode属性差异
- U+00B5(Latin-1补充块的微符号):Unicode分类为
Symbol, Other(其他符号),不属于上述任何符合NameChar要求的类别,因此无法通过XML命名规则验证。 - U+03BC(希腊语小写字母μ):Unicode分类为
Letter, Lowercase(小写字母),完全符合NameChar的字符类型要求。
- U+00B5(Latin-1补充块的微符号):Unicode分类为
规范设计的考量
XML命名体系的核心是区分“标识符”和“符号/字面量”:标识符(如元素名、实体名)需要具备字母或类似字母的属性,以便解析器能明确区分命名结构与内容。U+00B5虽然语义上是单位符号,但从Unicode属性上属于符号类,不符合标识符的设计要求。
如果需要在DTD中使用语义正确的“µm”作为测量单位,建议将其定义为字符串枚举而非标识符枚举——比如在属性定义中使用( "µm" | "mm" | "m" )这样的形式,而非依赖Name类型的实体定义。
内容的提问来源于stack exchange,提问作者Theodore Hall
相关产品推荐
相关产品推荐

