我的经理要求我解释为什么在将字符串传递给XMLStreamWriter
之前调用jdom的checkCharacterData
,因此我参考了XML规范,但是感到困惑。
XML 1.0 和 XML 1.1 声明,有效的 XML 字符包括“制表符、回车、换行以及 Unicode 和 ISO/IEC 10646 的合法字符”。听起来很愚蠢:制表符、回车和换行 已经是 Unicode 的合法字符了。然后还有这个注释:“任何 Unicode 字符,除了代理块、FFFE 和 FFFF”,在 XML 1.1 中被修改为指 U+0000 – U+10FFFF,不包括 U+0000、U+D800 – U+DFFF 和 U+FFFE – U+FFFF;请注意 NUL 被排除在外。还有一个注释说,作者“不鼓励”使用兼容字符,其中包括一些已经被 BNF 排除的字符。
问题:什么是/曾经是合法的Unicode字符?NUL是否是有效的Unicode字符?(我找到了ISO 10646(第2版,2010年)的pdf,似乎没有排除U+0000。)在2000版和2010版之间,ISO 10646或Unicode是否更改以包括先前排除的控制字符?至于XML,为什么文本如此宽松/松散而BNF则很严格?