zoukankan      html  css  js  c++  java
  • [C#.net]处理UTF-8文件乱码

    今天帮同事处理一个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 
  • 相关阅读:
    SQL2008-显示表大小行数
    SQL2008-备份SQL数据库的语句
    SQL2008-截取字段函数
    SQL2008-字符转数字CAST和CONVERT
    SQL2008-查询库中是否存在某表
    SQLServer 2000个人版下载
    SQL2008-不同数据库之间的触发器
    SQL2008--行号的得到
    Microsoft Visual Stduio 2005 Ent安装报错解决方法
    zlib快速编译脚本
  • 原文地址:https://www.cnblogs.com/masonlu/p/8819715.html
Copyright © 2011-2022 走看看