十分钟内学会:自动识别GB2312与UTF-8编码的文件
2007-03-22 14:08 Cat Chen 阅读(6892) 评论(7) 编辑 收藏 举报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中。
最后,如果你觉得本系列的文章对你有价值,可以考虑订阅Cat in dotNET,可选的方式包括通过Feed订阅(http://feeds.feedburner.com/CatChen/dotNET)和通过Email订阅(http://www.feedburner.com/fb/a/emailverifySubmit?feedId=573799)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构