日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

彻底解决.net中编码问题的心得

發(fā)布時間:2023/12/9 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 彻底解决.net中编码问题的心得 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文將解決.net(c#)系統(tǒng)中因編碼轉(zhuǎn)換而出現(xiàn)的亂碼問題。

最近的系統(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。