2012-01-02 102 views
1

我有以下XML:轉換KOI8-R XML節點轉換爲Unicode在C#

<root> 
    <text><![CDATA[ОПЕЛХМЮБЮ ОПЕГ БЗПРЪЫ ЯЕ АЮПЮАЮМ, Б ЙНИРН ЯЕ]]></text> 
</root> 

我知道這段文字是用編碼KOI8-R產生的(這個文本顯示在我的文本編輯器中,只有當我選擇這種編碼當我打開XML文件爲文本),我想將此節點的值轉換爲可在C#中使用的字符串。我可以讀取此節點的InnerText值,但這不是我所期望的。有人能告訴我用這種編碼將字符串轉換成Unicode的正確方法嗎?

更新

繼喬恩斯基特建議,解決方案應該是這樣的:

Encoding encoding = Encoding.GetEncoding("KOI8-R"); 
XmlDocument doc2 = new XmlDocument(); 

using (TextReader tr = new StreamReader(outputPath, encoding)) 
{ 
    doc2.Load(tr); 
} 

回答

2

如何你有XML?它應該有一個XML聲明,說明它正在使用哪種編碼;否則就簡單地用XML來說是不正確的。你不應該在之後編碼,因爲你已經解析了XML。因此可能是這樣的:

Encoding encoding = Encoding.GetEncoding("KOI8-R"); 
XDocument doc; 
using (var reader = File.OpenText("file.xml", encoding)) 
{ 
    doc = XDocument.Load(reader); 
} 

......但正如我所說,文件本身應聲明編碼。

+0

該文件是由外部工具生成的(xpdf - 我認爲),這是我得到的唯一的東西。現在,我不太熟悉linq和外部聲明......我應該使用哪些名稱空間來指定OpenText方法的編碼?我嘗試了System.Linq和System.Xml.Linq,但它們都沒有工作... – dcg 2012-01-02 10:41:50

+1

@dcg:如果你不想使用'XDocument',那麼'XmlDocument.Load'也會帶一個'TextReader' 。但是,如果xpdf基本上創建了一個無效的XML文件或一個文本錯誤的文件,那麼它非常糟糕。您確定這不是在流水線早期出現問題嗎?確切地找出問題出在哪裏是值得的,否則你很可能會丟失數據。 – 2012-01-02 10:44:23

+0

不幸的是,我無法去改變那件事。這是非常舊的代碼由其他人寫的,它迄今爲止工作得很好。對我來說,看看innerText值會更容易/更快。那麼,它就是這樣的!謝謝! – dcg 2012-01-02 10:55:04