【问题标题】:Is it possible to read ASCII control characters in XML?是否可以读取 XML 中的 ASCII 控制字符?
【发布时间】:2016-09-26 09:13:08
【问题描述】:

我刚接触 XML,我需要知道,

是否可以读取 XML 中的 ASCII 控制字符?或

是否可以替换 XML 中的 ASCII 控制字符?

【问题讨论】:

  • 我已经尽我所能回答了你,但如果你能提供更多关于你想要实现的目标的细节将会很有帮助。
  • 参见 Wiki 文章:en.wikipedia.org/wiki/…
  • @jdweng:这有什么帮助?它根本没有谈论控制字符
  • 它指定如何将字符的十六进制值添加到xml。您可以按十六进制值添加控制字符。

标签: c# xml browser ascii


【解决方案1】:

XML 1.1 允许 U+0000 以外的所有 Unicode 字符,但 XML 1.0 有一个受限制的字符集。来自section 2.2 of the 5th edition

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

这是底层字符集 - 你不能使用 CharRef 等来创建它们。

不幸的是,XML 1.0 基本上是无处不在的。 XML 1.1 从未真正起飞。这意味着您不应该尝试生成包含 ASCII 控制字符的 XML 文档——它们不是有效的 XML 文档,尽管不幸的是,许多 XML API 无论如何都会让您创建它们:(

基本上,您应该在将数据传递给您使用的任何 XML API 之前删除控制字符。如果您需要保留它们,则需要创建自己的转义或类似的东西(例如 UTF-8 编码整个文本,然后用 base64 表示......这一切都很讨厌)。

【讨论】:

  • 嗨乔恩,你的回答很有用。我的系统上有一个 XML 文件,但其中也包含 ASCII 控制字符。我需要使用 C# 在浏览器上显示该 XML 文件。但我遇到了错误。那么有什么方法可以替换 ASCII 控制字符或跳过这些字符?
  • @SRJ:基本上,它不是一个有效的 XML 文件。如果您知道编码,则可以将文件作为字符串加载(例如File.ReadAllText),替换字符,然后在内存中解析它或将其保存回磁盘。您应该调查 XML 文件的来源,并报告问题。
  • “XML 1.1 允许所有 Unicode 字符”并不完全正确,U+0000 被视为 Unicode 字符,但在 XML 1.1 中是不允许的。其余的确实是允许的(就此而言,星体平面中的非字符在两者中都是允许的,尽管它们在 Unicode 中是不允许的,因为它们不允许在可以被视为过度简化的有效文本文件中或规范中的错误,具体取决于人们选择如何看待这种怪异)。
  • @JonHanna:谢谢,将为 U+0000 进行编辑。我没有包括非字符方面,因为这可能超出了 OP 的范围 :)
  • 我简单地用作,string sMyXMLContent = ""; var validXmlChars = sMyXMLContent.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray();
猜你喜欢
  • 2012-08-06
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 2023-03-06
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
相关资源
最近更新 更多