2012-02-08 58 views
0

我們正在解析包含用戶信息(如姓名,年齡等)的xml文件。但用戶來自世界各地,我們需要在xml中使用不同的字符集。例如,有名稱爲「Sikl¢si」的用戶。如果我設置xml編碼UTF-8,c#xmldocument對象會在xml加載時拋出異常。我將編碼更改爲iso-8859-9,現在正在工作。但是,如果我們有另一個不在iso-8859-9中的有趣的字符,它將再次成爲問題。這個問題的最終解決方案是什麼?適用於多國解決方案的Xml編碼

回答

-1

使它成爲UTF-32,它將覆蓋其中的大部分。有關UTF的更多信息,請訪問this

+0

不,它不工作。我認爲XmlDocument不知道UTF-32。它會在根級別提供錯誤消息:根級別的數據無效。第1行,第40位 – londondev 2012-02-08 12:24:09

+1

UTF-32將覆蓋您可能需要的所有可能的字符,但UTF-16和UTF-8也會覆蓋。沒有理由爲什麼UTF-32可以工作,而UTF-8不能。 – svick 2012-02-08 14:04:05

3

最終的解決方案是首先知道用什麼編碼來編碼文件。一個XML文件應該說明它在XML聲明中使用的編碼(例如<?xml charset="UTF-8" ?>)。如果沒有,那麼文檔應該是UTF-8或UTF-16(並且它們之間的區別可以自動檢測)。

您的XML解析器應該根據XML文件中的信息透明地處理編碼。

如果您正在接收不會解析的文檔,那麼問題首先在於它是如何生成的。你應該拒絕他們,並告訴提交的修復編碼。 (請注意,任何Unicode編碼都可以處理您可能需要的任何字符(以及您不需要的大量數字)。問題是文檔不是UTF-8,不是UTF-8 -8不能處理正在使用的字符)。

+0

實際上,我們是從數據庫生成XML文件。因此,沒有關於用戶需要的字符集信息。我不知道該怎麼辦。 – londondev 2012-02-08 12:09:28

+1

將數據庫中的所有數據轉換爲UTF-8,並確保修改它的所有內容都保持爲UTF-8。嘗試從當前損壞狀態恢復時,您可能必須執行大量手動檢查。 – Quentin 2012-02-08 13:32:24

相關問題