【问题标题】:Saving an escape character 0x1b in an XML file在 XML 文件中保存转义字符 0x1b
【发布时间】:2010-11-09 13:58:52
【问题描述】:

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

要发送的字符之一是转义字符 (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 文件中时会发生错误。有什么建议吗?

【问题讨论】:

    标签: .net xml escaping


    【解决方案1】:

    i类似的问题:

    How do I escape unicode character 0x1F in xml?

    所以要么不推荐的方法

    
    

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

    【讨论】:

      【解决方案2】:

      还有另一种方法可以使用 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);
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          也许您可以用您选择的特殊字符串替换 ESC 字符,例如“MyEsc123”。在写入文件之前,您将 0x1B 的所有实例替换为新字符串,并在读取文件时再次进行转换。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-06
            • 2012-12-02
            • 1970-01-01
            • 2021-03-17
            • 2016-05-21
            相关资源
            最近更新 更多