2010-11-09 65 views
1

我們有一個應用程序可以使用其內部打印機字體與打印機進行通信。這需要使用字體描述屬性以二進制格式發送一些數據。將轉義字符0x1b保存在XML文件中

要發送的字符之一是轉義字符(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文件中時發生錯誤。有什麼建議麼?

回答

2

將這些值保存在XML文件中是不可能的。您可能需要事先對其進行編碼。你可以使用Base 64

0

也許你可以repalce的ESC字符與您選擇的特殊字符串,說「MyEsc123」。在寫入文件之前,用新字符串替換0x1B的所有實例,並在讀取文件時再次進行轉換。

4

還有一種方法可以通過使用System.Xml功能來轉義這些字符。

你只需要爲XmlWriterSettings設置CheckCharacters標誌爲false。

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

但是你如果要讀取xml相同的標誌設置爲false XmlReaderSettings。 :)

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