2011-12-08 23 views
1

一個XML文檔,我的影片是從一些內容,人們從各種各樣的地方複製/粘貼(Word文檔主要是雖然)生成的XML文檔。編碼包含U + 001A

它看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[ 
     (whatever was pasted) 
    ]]></data>   
</response> 

我一直使用的UTF-8iso-8859-1編碼,但現在有人走了,複製/粘貼Unicode字符U+001A0x1a),我無法找到一個編碼,將接受它。無論使用何種編碼,我將XML文件放入的所有內容(例如Firefox,Internet Explorer,XML Spy)均表示它無效。

是否有一個編碼,我可以使用,這將阻止跌倒過該文件,或者我需要逐個開始剝離所有這些字符了嗎?

回答

6

U + 001A不是XML文檔中的有效字符。根據the specification字符的有效範圍爲:

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ 
+0

不是我希望聽到的,但謝謝。看起來另一件事是「確定很快修復」將會變成另一個漫長的一天。 –

1

預處理原始數據,編碼Unicode字符不是XML文檔自己的支持。例如,使用HTML字符編碼:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[This is &#x1a; a test.]]></data>   
</response> 

閱讀時回到HTML編碼轉換回正確的Unicode字符你必須進行後處理的數據。

3

字符U + 001A位於C0控件區域,主要是(包括U + 001A)在XML中被禁止。任何人故意進入它都是不可能的。相反,它是由軟件生成的,在執行字符代碼轉換和檢測格式錯誤的數據(例如源代碼中沒有定義的字節的字節)時很可能。 U + 001A(SUBSTITUTE)字符是用於這種用途;看我的quick reference to C0 Controls

如果無法找出並修復所產生的U + 001A轉換(或其他工藝),我建議您通過U + FFFD替代字符替換它。從某種意義上說,U + 001A的Unicode等價物。 (後者當然也以Unicode編碼,但在許多情況下不允許使用。)但它具有可見的字形,但字形只能以幾種字體存在;檢查fileformat.info entry on U+FFFD瞭解更多信息。

的這裏點是,改變U + 001A到U + FFFD使得在可接受的XML數據,並仍然保留有關字符級的數據誤差的信息。

相關問題