博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET自动识别GB2312与UTF-8编码的文件
阅读量:7099 次
发布时间:2019-06-28

本文共 1003 字,大约阅读时间需要 3 分钟。

 Question

  在简体中文系统中,我们有时候需要打开一个保存在磁盘上的纯文本文件,例如txt,但却不知道其保存编码,该怎么办呢?

  如果文本只需要在Windows上显示,那就很幸运了,因为无论是GB2312还是UTF-8编码的string都能够正确显示。但如果需要输出到ASP.NET页面上就不是那么简单了,因为如果页面编码为UTF-8但纯文本文件导入的string是GB2312,那就会导致乱码,反之亦然。因此,我们需要一种方法自动识别磁盘上的纯文本文件到底是么编码的。

  Answer

  StreamReader其实是有编码自动检测功能,不过因为它仅仅检测前3个字节,所以只能UTF-8、Little-Endian Unicode、Big-Endian Unicode之前作出选择,如果上述3个都不匹配,就选择用户提供的编码。因此,我们可以提供GB2312编码给StreamReader,让它在GB2312和UTF-8之前自动作出选择。

using (StreamReader reader = new StreamReader(path, Encoding.Default)

{
  string line;
  while ((line = reader.ReadLine()) != null)
  {
    FileTextBox.InnerHtml += Server.HtmlEncode(line) + "\r\n";
  }
  FileEncodingNameLabel.Text = reader.CurrentEncoding.EncodingName;
}
  上述代码使用Encoding.Default初始化StreamReader,Encoding.Default指的是系统的默认ANSI编码,在简体中文系统中就是GB2312。这样写能够让代码保持有一定的兼容性,例如在繁体中文系统就变成了自动在Big5和UTF-8之间做出选择。之后的代码就是用StreamReader逐行读取文件内容并放到FileTextBox中,最后通过StreamReader的CurrentEncoding属性获取编码名称并显示在FileEncodingNameLabel中。

转载于:https://www.cnblogs.com/caohs/archive/2013/03/01/2938156.html

你可能感兴趣的文章
别让CDN的回源把你的服务器拖垮,采用正确的回源策略
查看>>
Spring AOP 本质(4)
查看>>
Java Swing 树状组件JTree的使用方法(转)
查看>>
Code digest
查看>>
关于java堆内存溢出的几种情况(转)
查看>>
java如何运行OS命令(转)
查看>>
小学四则运算 “软件”之初版
查看>>
队列的链式储存
查看>>
JS小功能系列5图片左右移动
查看>>
scrapy之爬虫思考
查看>>
基于PIC单片机的SPWM控制技术
查看>>
复利计算
查看>>
深入理解计算机系统(2.8)---浮点数的舍入,Java中的舍入例子以及浮点数运算(重要)...
查看>>
公安部
查看>>
sharepoint2010 cal
查看>>
一次Zookeeper 扩展之殇
查看>>
linux链接
查看>>
值得一看:一个故事说清楚锐捷网络COffice的作用和优势
查看>>
IT168采访记录
查看>>
深入解析大数据虚拟化的架构(上)- 部署架构
查看>>