2010-04-16 132 views
1

我們的saxparser不會忽略出現在文件開頭的字節順序標記saxparser忽略字節順序標記

如何讓我的薩克斯解析器忽略字節順序標記?

+0

有可能沒有辦法...只保存沒有BOM – 2010-04-16 11:30:07

回答

1

看起來你可能會給utf-16輸入一個不期望utf-16的saxparser。嘗試將數據轉換爲utf-8,這可能會有所幫助。

2

在十六進制編輯器中檢查文件。

如果最初的字節確實是\xEF\xBB\xBF後跟文檔本身,那麼它是一個UTF-8人造BOM。儘管UTF-8人造材料清單是一種犯規錯誤,生成它們的工具需要使用特殊編程酸銷燬,但XML規範確實可以識別和忽略此字節序列,因此如果您的SAX解析器不符合要求並需要一些踢。

如果是給你最初的字節實際上是類似的一個:

\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\xBB\xBF\xC3\xAF\xC2\xBB\xC2\xBF 
\xEF\x00\xBB\x00\xBF\x00 
\xFF\xFE\xEF\x00\xBB\x00\xBF\x00 

那麼你所得到的是雙重編碼的意外。在這種情況下,您需要查看生成該文件的程序,因爲它的格式不正確,SAX解析器可能是正確的,並且文件中的其他Unicode字符也可能會混淆。可能它正在做一些愚蠢的事情,例如將文檔串行化成字節串,然後通過僞造的解碼/編碼循環發送它。無論採用哪種方式,如果您需要讓解析器跳過麻煩的字節序列,則必須使用您手動入侵的版本來刪除此前綴。不知道你的SAX解析器是什麼(甚至是什麼語言),很難說如何做到這一點。

也許你可以在將它傳遞給解析器之前尋找輸入流?也許你可以將文件讀入一個字節字符串,並將其中的初始字節刪除到解析器?如果你的解析器沒有給你這些選項,你將不得不以字節爲單位加載文件,剪輯開始並保存到一個新的文件。