Masonlu  

今天帮同事处理一个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 

 

posted on 2018-04-13 13:19  Masonlu  阅读(8449)  评论(0编辑  收藏  举报