我们有一个应用程序使用内部打印机字体与打印机通信。这需要使用字体描述属性以二进制格式发送一些数据。
要发送的字符之一是转义字符(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文件中时,会发生错误。有什么建议吗?
答案 0 :(得分:4)
答案 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的所有实例,当您读取文件时,再次使用转换后的字符。