技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

C#創(chuàng)建的CSV文件Excel打開有亂碼的原因及解決方法

作者:admin    時間:2021-8-24 13:53:43    瀏覽:

今天用C#創(chuàng)建一個CSV文件,過程很順利,創(chuàng)建的文件用記事本能正常打開且內(nèi)容沒有問題,可是,用Excel打開時卻在開頭出現(xiàn)幾個字符的亂碼,這是怎么回事?

 

內(nèi)容出現(xiàn)亂碼基本可斷定是內(nèi)容編碼問題

經(jīng)驗告訴我,內(nèi)容出現(xiàn)亂碼基本可斷定是內(nèi)容編碼有問題,但是如何解決這個編碼問題,讓它能在各個編輯器或瀏覽器打開正常呢?

再研究研究。

發(fā)現(xiàn)這個CSV文件用記事本打開,再保存后,也能用Excel正常打開沒有亂碼。這是什么原因呢?

這就要看看記事本保存的utf-8與我程序創(chuàng)建時用的utf-8有什么不同了。

UTF-8編碼與UTF-8 BOM編碼的不同

經(jīng)過查閱相關(guān)資料,發(fā)現(xiàn),記事本保存的utf-8文件,實際上會在文件開始的地方插入UTF-8 BOM頭,是UTF-8 BOM編碼的文件,這就涉及到加BOM不加BOM的不同了。

UTF-8編碼的文件中,BOM占三個字節(jié)。如果用記事本把一個文本文件另存為UTF-8編碼方式的話,用UE打開這個文件,切換到十六進制編輯狀態(tài)就可以看到開頭的FFFE了。

看下圖。


(點擊圖片放大)

這是個標識UTF-8編碼文件的好辦法,軟件通過BOM來識別這個文件是否是UTF-8編碼,很多軟件還要求讀入的文件必須帶BOM(Excel就是其中之一)。

解決方法

知道了問題所在,解決的方法就自然有了。

下面是C#代碼:

UTF-8編碼的字符串開頭處的三個bytes 0xef,0xbb,0xbf就稱為UTF-8 BOM頭。

關(guān)于C# 在TXT寫入數(shù)據(jù)使用UTF-8 bom編碼模式

C#中通過

StreamWriter sw = new StreamWriter(path, true);
sw.WriteLine(Content);

這樣的代碼寫入TXT中的數(shù)據(jù)默認的編碼是GB2312格式,那么如何才能使用utf-8的編碼格式寫入TXT呢?

代碼如下:

UTF8Encoding utf8 = new UTF8Encoding(false);
StreamWriter sw = new StreamWriter(path, true, utf8);

這樣確實使用utf-8的編碼寫入沒錯,但是卻不是BOM的編碼模式,那如何才能使用utf-8 BOM編碼格式呢?

其實很簡單,代碼如下:

UTF8Encoding utf8BOM = new UTF8Encoding(true);
StreamWriter sw = new StreamWriter(path, true, utf8BOM);

C#保存文件為無BOM的utf8格式

有些情況,我們要保存無BOM的utf8格式,用C#可以這樣來實現(xiàn)。

用C#的 File.WriteAllLines 方法,保存文件為無BOM的utf8格式:

File.WriteAllText(strLuaFilePath, string.Join("\n", fileContentList.ToArray()), new System.Text.UTF8Encoding(false));

總結(jié)

本文介紹了C#創(chuàng)建的CSV文件Excel打開有亂碼的原因及解決方法,通過本文的介紹,我們可以知道文件保存的編碼,UTF-8與UTF-8 BOM的不同,當以后再遇到文件編碼問題時,又多了一份經(jīng)驗。

相關(guān)文章

標簽: CSharp  CSV  Excel  亂碼  asp.net  UTF8-BOM編碼  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */