猿问

为什么在XML 1.0中“控制”字符是非法的?

在XML 1.0中有许多不能合法编码的字符,例如U+0007('bell')和U+001B('escape')。大多数有趣的字符是非空白“控制”字符。


从(例如)这个问题和其他问题中可以很明显地看出问题是XML规范 -但是有人可以向我说明为什么 XML规范禁止使用这些字符吗?


似乎可能需要对它们进行转义编码,例如分别作为和,但是也许有实际的原因,禁止而不是要求字符被转义?


回答者建议,有某种动机来避免传输控制字符,但是Unicode包括许多其他类似控制的字符(考虑U+200C“零宽度非连接符”)。我知道这种行为可能没有充分的理由,但我仍然想更好地理解它。


这特别令人沮丧,因为当这些字符值以其他编码数据格式出现时,我最终“双转义”了需要对其进行编码的新XML文档。


慕妹3146593
浏览 859回答 3
3回答

哆啦的时光机

我的理解是,禁止该范围的理由是,标记语言不需要支持传输和流控制字符,并且将其包括在内会对二进制转换中的所有编辑器和解析器造成问题。我正在努力从Tim Bray等人的书中找到关于此事的任何信息。编辑:有关控制字符的一些 讨论和含糊的承认,它并不是设计过度:在17/06/00 -0500 09:27 AM,马克·沃尔克曼(Mark Volkmann)写道:我从未见过关于大多数ASCII控制字符(例如换页符)在XML文档中不允许的原因的讨论。任何人都可以告诉我该决定的原因,或向我指出规格。这就解释了吗?我不确定如果再次执行此操作,是否会以相同的方式执行。我看不出他们有什么真正的伤害。显然,如果您正在针对一种高度可互操作的内容标记语言(并且XML是)进行优化,则对诸如vertical-tab和Backspace等之类的东西抱有怀疑是合法的……但是,如何保持一致\ n和DEL等?-蒂姆
随时随地看视频慕课网APP
我要回答