用C#程序通過StreamWriter導出字符串,導出生成txt文本文件,用記事本打開正常,改成csv格式,用excel打開亂碼,且不能正確識別分列。
后用記事本打開,把編碼從utf-8改成ansi之后,就可以正確識別分列和沒亂碼了。
【故障現象描述】
從網頁上導出數據文件存儲為CSV格式的文件,使用記事本打開文字顯示沒有問題,使用EXCEL打開出現亂碼的情況。
【故障原因分析】
此種情況一般是導出的文件編碼的問題。在簡體中文環境下,EXCEL打開的CSV文件默認是ANSI編碼,如果CSV文件的編碼方式為utf-8、Unicode等編碼可能就會出現文件亂碼的情況。
【解決方法】
(1)設置office語言環境(以office 2003為例):
開始菜單-Microsoft office- Microsoft office工具- Microsoft office 2003語言設置,將Microsoft office應用程序默認方式的語言設為“中文(簡體)”,這也是office 2003的默認設置。
(2)使用記事本打開CSV文件,文件-另存為,編碼方式選擇ANSI:
(3)保存完畢后,用EXCEL打開這個文件就不會出現亂碼的情況:
【編碼方式講解】
(1)ANSI編碼
不同的國家和地區制定了不同的標准,由此產生了 GB2312, BIG5, JIS 等各自的編碼標准。這些使用 2 個字節來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,在日文操作系統下,ANSI 編碼代表 JIS 編碼。 不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬於兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。 當然對於ANSI編碼而言,0x00~0x7F之間的字符,依舊是1個字節代表1個字符。這一點是ASNI編碼與Unicode編碼之間最大也最明顯的區別。例如上面演示的文件中英文字母和數字並沒有出現亂碼的情況。
(2)Unicode編碼
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。隨着計算機工作能力的增強,Unicode也在面世以來的十多年里得到普及。
Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼方案。Unicode用數字0-0x10FFFF來映射這些字符,最多可以容納1114112個字符,或者說有1114112個碼位。碼位就是可以分配給字符的數字。UTF-8、UTF-16、UTF-32都是將數字轉換到程序數據的編碼方案。
(3)UTF-8編碼
UTF-8是UNICODE的一種變長字符編碼又稱萬國碼,由Ken Thompson於1992年創建。現在已經標准化為RFC 3629。UTF-8用1到6個字節編碼UNICODE字符。用在網頁上可以同一頁面顯示中文簡體繁體及其它語言(如日文,韓文)。