[C#.net]處理UTF-8文件亂碼


今天幫同事處理一個2M左右的文件的格式,發現使用Encoding.default & Encoding.UTF8 & Encoding.GetEncoding("GB2312")都是亂碼

上網找了好久,發現原始文件是UTF-8-BOM的,與UTF-8的主要差異是UTF-8比UTF-8-BOM用二進制查看會多出“\xef\xbb\xbf”幾個字節

System.Text.Encoding.UTF8 是一個靜態實例,而 new UTF8Encoding(false) 創建的實例是不含有 BOM 的。

BOM,即 Byte Order Mark,也即字節流標記,它是用來讓應用程序識別所用的編碼的。UTF-8 的 BOM 是 0xEFBBBF。

public UTF8Encoding(bool encoderShouldEmitUTF8Identifier),可以看出,如果我們指定參數為 false,表示省略 BOM;如果為 true,則和 Encoding.UTF8 一樣了。

使用Notepad++神器看到文件格式為UTF-8-BOM的

所以使用UTF8Encoding(false)就正常了

 當時還以為VBS幾句話就能搞定的,結果發現只能讀取不能寫入啊,還是C#功能多

 1 s=Encode(".\test.log")
 2 Msgbox s
 3 Set FSO=WScript.CreateObject("Scripting.FilesystemObject")
 4 '報錯,還沒有找到原因
 5 FSO.CreateTextFile(".\1.txt",True).WriteLine("111")
 6 
 7 Function Encode(filePath) 
 8 Set stm = CreateObject("Adodb.Stream") 
 9 stm.Type = 2 
10 stm.mode = 3 
11 stm.charset = "utf-8" 
12 stm.Open 
13 stm.LoadFromFile filePath 
14 Encode = stm.readtext 
15 stm.close 
16 End Function 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM