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編碼。
你說得對,reader.Peek()就足夠了。謝謝。 – sbk 2010-02-21 12:08:54