首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML中真正允许的字符

XML中真正允许的字符
EN

Stack Overflow用户
提问于 2014-01-08 08:30:57
回答 1查看 1.9K关注 0票数 0

由于解析某些XML数据时出现了一些解析器错误,我查看了XML标准d,以确定真正允许的是什么。我目前的疑虑是在标签<bla>some content</bla>的内容中允许哪些内容,即允许some content包含什么内容。

我在第2.4节中有:

代码语言:javascript
复制
CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

这意味着“所有不包含<&]]>的字符序列。但是否定[^<&]实际上是在哪个字符集上操作呢?它是完整的Unicode范围(afaik #0x0000到任何其他字符),还是更像是第2.2节中的Char定义:

代码语言:javascript
复制
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

在这种情况下,需要在内容中转义相当多的字符?

EN

回答 1

Stack Overflow用户

发布于 2014-01-08 08:39:58

我们友好的维基百科有一节专门讨论这个问题。我认为这个解释要简单得多。http://en.wikipedia.org/wiki/XML#Escaping

有效字符

以下范围的Unicode代码点在XML1.0文档中是有效的:9

  • U+0009,U+000A,U+000D:这是XML1.0中唯一接受的C0控件;
  • U+0020-U+D7FF,U+E000U+FFFD:这排除了BMP中的一些(并非全部)非字符(禁止所有代理,U+FFFE和U+FFFF );
  • U+10000-U+10 10FFFF:这包括补充平面中的所有代码点,包括非字符.

XML 1.110扩展了允许的字符集,包括上述所有字符,加上U+0001-U+001F范围内的其余字符。但是,同时,它限制了C0和C1控制字符的使用,而不是U+0009、U+000A、U+000D和U+0085,要求它们以转义形式编写(例如,必须将U+0001写成或类似的)。对于C1字符,此限制是向后不兼容的;引入此限制是为了允许检测常见的编码错误。

代码点U+0000是任何XML1.0或1.1文档中唯一不允许的字符。

逃逸

XML提供转义功能,用于包含难以直接包含的字符。例如:

  • 字符"<“和"&”是关键的语法标记,可能永远不会出现在CDATA部分之外的内容中。
  • 一些字符编码只支持Unicode的一个子集。例如,在ASCII中编码XML文档是合法的,但是ASCII缺少Unicode字符(如"é“)的代码点。
  • 可能不可能在作者的机器上键入字符。
  • 有些字符具有无法从视觉上与其他字符区分的符号:示例如下
代码语言:javascript
复制
- non-breaking space ( ) " "
- compare space ( ) " "
- Cyrillic Capital Letter A (А) "А"
- compare Latin Capital Letter A (A) "A"

有五个预定义的实体:

  • <表示"<“
  • 代表">“
  • &代表"&“
  • “代表”
  • “代表”

所有允许的Unicode字符都可以用数字字符引用表示。考虑一下汉字"中",它在Unicode中的数字代码是十六进制4E2D,或十进制20,013。键盘无法输入此字符的用户仍然可以将其插入以中或中方式编码的XML文档中。类似地,字符串"I <3 J rg“可以编码为"I <3 J rg”,以便包含在XML文档中。

但是,"�“是不允许的,因为空字符是从XML中排除出来的控制字符之一,即使使用数字字符引用也是如此。14需要一种替代的编码机制(如�)来表示这些字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20990431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档