今天帮同事处理一个2M左右的文件的格式,发现使用Encoding.default & Encoding.UTF8 & Encoding.GetEncoding("GB2312")都是乱码
上网找了好久,发现原始文件是UTF-8-BOM的,与UTF-8的主要差异是UTF-8比UTF-8-BOM用二进制查看会多出“xefxbbxbf”几个字节
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(". est.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