2016-10-05 19 views
0

我有以下將Umlaute字符寫入csv文件的C#代碼。 打開文件後,這些字符完全失真。 下面是代碼:無法在excel中正確保存字符

string csvFile = string.Empty; 
using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName)) 
{ 
    //DataTable columns are already formatted WRT commas and double quotes 
    for (int i = 0; i < dt.Rows.Count; i++) 
     csvFile += String.Join(",", dt.Rows[i].ItemArray) + "\r\n"; 

    file.WriteLine(csvFile); 
} 

我檢查字符串「csvFile」和它正確地持有這些字符。 這是Excel問題還是我的代碼?

+1

如果打開CSV工作_Is這個Excel問題,或者我code_內文件爲文本,字符顯示是否正確?如果是這樣,這是一個Excel問題。 – stuartd

+0

是的,它確實顯示在記事本 – Sandeep

+0

http://stackoverflow.com/questions/6002256/is-it-possible-to-force-excel-recognize-utf-8-csv-files-自動 – decPL

回答

2

您沒有將正確的BOM字符添加到您的輸出文件,所以Excel不知道它應該使用的編碼。爲了避免這種嘗試添加編碼到您的StreamWriter這樣的:

System.IO.StreamWriter file = new System.IO.StreamWriter(fileName, new UTF8Encoding(true)) 

編輯:由於stuartd評論說,這可能不是正確的每一個Excel版本

+0

舊版本的Excel中的[可能並不總是有效](http://stackoverflow.com/a/155176/43846) – stuartd

+0

這個答案是正確的。使用'Encoding.UTF8'靜態屬性也可以工作,因爲它也會發出字節順序標記(BOM)。有點令人困惑的是,新的UTF8Encoding()是_without_ BOM,而Encoding.UTF8是_with_ BOM。沒有指定時,「StreamWriter」的默認值是不使用BOM。 –

+0

另一種方法是使用'Encoding.Default',它取決於當前機器的ANSI代碼頁。這可能會符合Excel的預期。如果您的應用程序要在其他計算機上使用,而不是您自己的應用程序,則這不是一個好的解決方案。 –