2010-03-25 53 views
2

我有一個將內容寫入文件的StringBuilder。在每個文件的末尾,我正在寫着版權符號。奇怪的是,我注意到,每當版權符號被寫入時,它都以「Â」開頭。我的代碼生成該文件的內容如下所示:C# - 文件編碼問題

using (StringWriter stringWriter = new StringWriter()) 
{ 
    stringWriter = GetFileContent(); 

    string targetPath = ConfigurationManager.AppSettings["TargetPath"]; 
    using (StreamWriter streamWriter = new StreamWriter(targetPath, false)) 
    { 
    StringBuilder sb = new StringBuilder(stringWriter.ToString()); 

    // Attempted fix 
    string content = sb.ToString(); 
    content = content.Replace("Â", ""); 

    streamWriter.Write(content); 
    } 
} 

正如你所看到的,我試圖做一個查找和替換。在這個過程中,我注意到一個「Â」不在內容本身。這使我相信在streamWriter中發生了一些事情。但是,我不確定它會是什麼。

有人可以告訴我爲什麼在「©」符號之前會彈出「?」以及如何解決?我相信它與編碼有關,但我不確定

謝謝!

回答

2

問題幾乎可以肯定的是你以後如何查看文件(它將被保存爲UTF-8)或者你如何讀取GetFileContent()中現有文件的內容。如果你可以給我們更多關於這兩點的信息,我相信我們會找到答案。

你得到的實際代碼 - 雖然有點奇怪和冗長,因爲你試圖解決問題 - 很好。

我的猜測是您正在使用假定Windows-1252或類似的文本編輯器查看文件。如果你可以告訴它使用UTF-8,我懷疑它會沒事的。

+0

我認爲StreamWriter使用的默認編碼是System.Text.Encoding.Default,這是平臺特定的不是嗎? – Glenn 2010-03-25 21:29:19

+0

@Caelum:不,它默認使用UTF-8。 'Encoding.Default'在這方面有點誤導性地命名。幾乎所有的.NET API都默認爲UTF-8。 – 2010-03-25 21:36:12

+0

所以它呢,猜我應該讀更多的doco .... – Glenn 2010-03-25 21:39:48