彻底解决.net中编码问题的心得
最近的系統(tǒng)與字符集打交道,字符集的編碼是一個非常頭疼的事情,不小心就會造成亂碼。深入學習編碼知識,可以使我們在寫程序時少走彎路。
要實現(xiàn)的功能:將一大堆網(wǎng)頁文件批量導入數(shù)據(jù)庫,然后再從數(shù)據(jù)庫中批量導出保存為網(wǎng)頁文件,導出的文件還需要再導入數(shù)據(jù)庫中,依次循環(huán)。
由于最原始的網(wǎng)頁文件來源很復雜,所以造成了編碼不統(tǒng)一,有utf8、gb2312、gbk等。一般情況下,.net讀取文本文件時,自己會識別出來編碼,不需要我們操心,但是,經(jīng)過測試,從數(shù)據(jù)庫中讀取的內(nèi)容保存為文件后(寫入時統(tǒng)一設(shè)置為utf-8),程序就不能正常識別文件的編碼了。
.net中的System.IO.File.ReadAllText(filePath),默認采用utf-8為編碼來讀取文件,也可以傳入編碼System.Text.Encoding.Default來解決問題。Default是Encoding類的一個屬性,表示操作系統(tǒng)的當前 ANSI 代碼頁的編碼。不同區(qū)域的操作系統(tǒng),該屬性值是也是不同的,比如:亞洲地區(qū)語言的編碼的值為:System.Text.DBCSCodePageEncoding。
.net通過文件的BOM信息,能判斷出來文件是什么格式:
Unicode {0xFF, 0xFE};
BE-Unicode {0xFE, 0xFF};
UTF8 = {0xEF, 0xBB, 0xBF};
由上可知,我將數(shù)據(jù)庫里的內(nèi)容保存為文件時,可能沒有將BOM信息寫入文件頭,因此.net沒有正確獲取到文件的編碼類型。
寫入文件時,將BOM信息也添加到文件的代碼:
| 以下為引用的內(nèi)容: StreamWriter myText; myText = new StreamWriter("文件路徑", false, new UTF8Encoding(true)); |
這樣保存的文件,.net就可以識別出來它的編碼了,而不至于再造成亂碼的問題了。
小結(jié):通過將文件轉(zhuǎn)換成byte[],然后分析文件的BOM信息,即可得到文件的編碼類型,然后進行相應的操作,避免造成亂碼!
當文件有BOM信息時,我們通過File.ReadAllText("c:\cn_web_com.html",System.Text.Encoding.Default)就可以讓.net自動去識別文件的編碼類型,從而獲取正確的文件內(nèi)容。
當文件沒有BOM信息時,我們在寫入文件時,最好能添加它的BOM信息。否則,我們只能手動針對不能的編碼來解析不同的文件,比如cn_web_com.html為utf8編碼,我們讀取它時,語句為:File.ReadAllText("c:\cn_web_com.html",System.Text.Encoding.GetEncoding("utf-8"));
總結(jié)
以上是生活随笔為你收集整理的彻底解决.net中编码问题的心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CMS网站页面管理开发汇总
- 下一篇: access四舍五入取整round_ac