在XML文件中保存转义字符0x1b

时间:2010-11-09 13:58:52

标签: .net xml escaping

我们有一个应用程序使用内部打印机字体与打印机通信。这需要使用字体描述属性以二进制格式发送一些数据。

要发送的字符之一是转义字符(0x1b)。系统状态和所有更改的选项稍后保存在XML文件中,但是当我们尝试编写该值时,我们会得到以下异常:

System.InvalidOperationException: There is an error in XML document (1009, 26). ---> System.Xml.XmlException: '[Some small backwards arrow symbol]', hexadecimal value 0x1B, is an invalid character.

我不确定为什么这个箭头可以作为逃生,但它适用于打印机。当我们尝试将其保存在XML文件中时,会发生错误。有什么建议吗?

4 个答案:

答案 0 :(得分:4)

类似的问题:

How do I escape unicode character 0x1F in xml?

所以要么是

的推荐方法


或使用Darin的答案中提到的base-64

答案 1 :(得分:4)

还有另一种方法可以通过使用System.Xml功能来转义此类字符。

您只需要为XmlWriterSettings将CheckCharacters标志设置为false。

using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings { CheckCharacters = false }))
{
  document.Save(xmlWriter);
}

但是如果要读取xml,则必须为XmlReaderSettings将相同的标志设置为false。 :)

using (XmlReader reader = XmlReader.Create(stringReader, new XmlReaderSettings { CheckCharacters = false }))
{
  document = XDocument.Load(reader);
}

答案 2 :(得分:2)

无法将这些值保存在XML文件中。您可能需要事先对其进行编码。您可以使用Base 64

答案 3 :(得分:0)

也许您可以使用您选择的特殊字符串重新表示ESC字符,例如“MyEsc123”。在编写文件之前,用新字符串替换0x1B的所有实例,当您读取文件时,再次使用转换后的字符。