2012-03-02 98 views
3

我需要寫一個文件的響應流。該流包含一個編碼頁面(iso-8859-1)。如何正確地將iso-8859-1轉換爲utf8?

這是我的代碼:

... 

using (TextWriter writer = new StreamWriter(tmpFilePath)) 
{ 
    using (TextReader reader = new StreamReader(answer, Encoding.GetEncoding("ISO-8859-1"))) 
    { 

    string line = ""; 
    while ((line = reader.ReadLine()) != null) 
    { 

     // try to decode 
     string decoded_line = decode(line); 

     writer.WriteLine(decoded_line); 
    } 

    } 

} 

... 


string decode(string message) 
{ 
    string result = ""; 

    Encoding iso = Encoding.GetEncoding("iso-8859-1"); 
    Encoding utf8 = Encoding.UTF8; 

    byte[] isoBytes = iso.GetBytes(message); 
    byte[] utf8Bytes = Encoding.Convert(iso, utf8, isoBytes); 

    result = utf8.GetString(utf8Bytes); 

    return result; 
} 

的問題是解碼()不工作

enter image description here

我怎麼能轉換成ISO-8859-1正確UTF8?

UPDATE

我靠小提琴手獲取內容類型:

enter image description here

+0

'message'的內容看起來不像是有效的ISO-8859-1 – 2012-03-02 22:10:30

+0

刪除您的decode()方法,解碼和編碼已由StreamReader/Writer處理。如果仍然有問題,那麼您沒有正確猜測輸入文件的編碼。 – 2012-03-02 22:14:18

回答

1

你解碼兩次 - 在創建StreamReader的時候就已經指定的編碼。結果字符串應該已被正確解碼。

這並不能解釋爲什麼message看起來像這樣 - 它應該看起來像一個普通的字符串。你確定你正在閱讀的文件包含你認爲它包含的內容嗎?

+0

是的,根據fiddler的內容類型是iso-8859-1 – auraham 2012-03-02 22:13:58

+0

你從哪裏得到那個流?請發佈代碼,我認爲問題在那裏。 – zmbq 2012-03-02 22:15:44

3

鑑於它應該是足夠的情況:

using (TextWriter writer = new StreamWriter(tmpFilePath, Ecoding.UTF8)) 
{ 
using (TextReader reader = new StreamReader(answer, Encoding.GetEncoding("ISO-8859-1"))) 
{ 
    while ((line = reader.ReadLine()) != null) 
    { 
     writer.WriteLine(decoded_line); 
    } 
}  
} 

如果這不起作用,請檢查您的數據。 (第一)行如何在調試器中查看?

+0

它看起來像上面的圖片(消息變量) – auraham 2012-03-02 23:01:47

相關問題