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

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

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

作者:admin    時(shí)間:2021-8-24 13:53:43    瀏覽:

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

 

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

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

再研究研究。

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

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

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

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

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

看下圖。


(點(diǎn)擊圖片放大)

這是個(gè)標(biāo)識(shí)UTF-8編碼文件的好辦法,軟件通過(guò)BOM來(lái)識(shí)別這個(gè)文件是否是UTF-8編碼,很多軟件還要求讀入的文件必須帶BOM(Excel就是其中之一)。

解決方法

知道了問(wèn)題所在,解決的方法就自然有了。

下面是C#代碼:

UTF-8編碼的字符串開(kāi)頭處的三個(gè)bytes 0xef,0xbb,0xbf就稱(chēng)為UTF-8 BOM頭。

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

C#中通過(guò)

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

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

代碼如下:

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

這樣確實(shí)使用utf-8的編碼寫(xiě)入沒(méi)錯(cuò),但是卻不是BOM的編碼模式,那如何才能使用utf-8 BOM編碼格式呢?

其實(shí)很簡(jiǎn)單,代碼如下:

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

C#保存文件為無(wú)BOM的utf8格式

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

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

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

總結(jié)

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

相關(guān)文章

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