2010-02-19 23 views
4

我用C#編寫一個簡單的文本文件處理工具,骨架看起來是這樣的:保留文本文件編碼(ASCII,UTF-8,UTF-16)

using (StreamReader reader = new StreamReader(absFileName, true)) // auto detect encoding 
    using (StreamWriter writer = new StreamWriter(tmpFileName, false, reader.CurrentEncoding)) // open writer with the same encoding as reader 
    { 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      // do something with line 
      writer.WriteLine(line); 
     } 
    } 

大多數文件它運行在是ASCII文件,偶爾有UTF-16在這裏和那裏。我想保留文件編碼,新創建的文件應該與正在讀取的文件具有相同的編碼 - 這就是爲什麼我使用CurrentEncoding閱讀器打開StreamWriter。

我的問題是一些的UTF-16文件缺少序言和被打開的StreamReader之後,它已經CurrentEncoding設置爲UTF-8,這將導致作家在UTF-8模式打開。在調試時,我可以看到讀者在第一次調用ReadLine之後將它的CurrentEncoding屬性更改爲UTF-16,但那時已經打開了寫入器。

我可以考慮一些解決方法(稍後打開作者或翻閱源文件兩次 - 第一個僅用於檢測編碼),但認爲我會首先向專家徵求意見。請注意,我並不關心ASCII文件的代碼頁,我只關心ASCII/UTF-8/UTF-16編碼。

回答

4

我想在打開作者之前試着做一個reader.Peek()--我認爲在你的情況下應該是足夠的。

+0

你說得對,reader.Peek()就足夠了。謝謝。 – sbk 2010-02-21 12:08:54