今天幫同事處理一個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