我正在開發應用程序的一部分,該應用程序負責將一些數據導出到CSV文件中。 該應用程序始終使用UTF-8,由於它在全部級別上都具備多語言的性質。 可是,在Excel中打開此類CSV文件(包含變音符號,西裏爾字母,希臘字母)並不能得到預期的結果,例如Г„/Г¤, Г–/Г¶
。 並且我不知道如何強制Excel理解打開的CSV文件是以UTF-8編碼的。 我還嘗試指定UTF-8 BOM EF BB BF
,但Excel忽略了這一點。 工具
有什麼解決方法嗎? google
PS哪些工具的行爲可能相似於Excel? 編碼
更新 spa
我不得不說,我已經使社區與問題的表達混淆了。 當我問這個問題時,我想以一種流暢,透明的方式在Excel中打開一個UTF-8 CSV文件而對用戶沒有任何問題的方法。 可是,我使用了錯誤的表述,要求自動執行 。 這很是使人困惑,而且與VBA宏自動化衝突。 對於這個問題,有兩個答案是我最感激的:Alex的第一個答案https://stackoverflow.com/a/6002338/166589 ,我已經接受了這個答案; 第二個是Mark https://stackoverflow.com/a/6488070/166589 ,該版本稍後出現。 從可用性的角度來看,Excel彷佛缺少對用戶友好的UTF-8 CSV的良好支持,所以我認爲這兩個答案都是正確的,而且我首先接受了Alex的答案,由於它確實代表Excel沒法作到這一點。透明地 這就是我在這裏自動感到困惑的地方。 馬克的答案爲更高級的用戶提供了一種更復雜的方式來達到預期的結果。 兩種答案都很好,但亞歷克斯的答案更適合我未明確說明的問題。 excel
更新2 code
在上次編輯五個月後,我注意到亞歷克斯的答案因爲某種緣由而消失了。 我真的但願這不是一個技術問題,而且但願如今再也不討論哪一個答案更大。 所以,我接受馬克的回答爲最佳答案。 ip
UTF-8字節順序標記將提示Excel 2007+您正在使用UTF-8。 (請參閱此SO帖子 )。 開發
若是有人遇到與我相同的問題,.NET的UTF8編碼類不會在GetBytes()
調用中輸出字節順序標記。 您須要使用流 (或使用解決方法 )來獲取要輸出的BOM。 get
這是一個老問題,但我剛遇到相似的問題,該解決方案可能會幫助其餘人: it
在將CSV文本數據寫到文件中,而後在Excel中打開生成的.csv將全部文本移動到同一列時,也遇到了一樣的問題。 閱讀以上答案後,我嘗試瞭如下方法,彷佛能夠解決問題。
建立StreamWriter時,請應用UTF-8編碼。 而已。
例:
using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) { /* ... do stuff .... */ output.Close(); }
忽略BOM的錯誤彷佛已在Excel 2013中修復。我對西裏爾字母有相同的問題,可是添加BOM字符\
確實有幫助。
這是一個老問題,但在搜索頂部出現。 通過屢次努力,我發如今csv文件開頭添加BOM字符會有所幫助。
我在此處簡要介紹了一下: https : //sites.google.com/site/ritechtips/home/the-multi-line-fields-csv-file-and-excel-import---ha
過去我遇到過一樣的問題(如何生成Excel能夠讀取的文件,其餘工具也能夠讀取)。 我使用的是TSV而不是CSV,可是出現了相同的編碼問題。
我沒法找到使Excel自動識別UTF-8的任何方法,而且我不肯意/不能對文件的使用者施加複雜的說明以如何打開它們。 所以,我將它們編碼爲UTF-16le(帶有BOM),而不是UTF-8。 大小是原來的兩倍,可是Excel能夠識別編碼。 並且它們壓縮得很好,所以大小不多(但遺憾的是歷來沒有)很重要。