C#读取中文文件出现乱码的解决方法

所属分类: 软件编程 / C#教程 阅读数: 63
收藏 0 赞 0 分享

本文实例讲述了C#读取中文文件出现乱码的解决方法。分享给大家供大家参考。具体分析如下:

先来看这段代码:

FileStream aFile = new FileStream(SingleFile,FileMode.Open);
StreamReader sr = new StreamReader(aFile,Encoding.GetEncoding("gb2312"),true);
string FileContent = sr.ReadToEnd();
aFile.Close();
ProcessData Pd = new ProcessData();
Pd.ProceData(FileContent);

StreamReader 使用3个参数 最后一个自动检测utf-8,中文大部分是gb2312,如果不是utf-8,就用gb2312

系统自带utf 检测 ,见如下:

private void DetectEncoding()
{
 if (this.byteLen >= 2)
 {
 this._detectEncoding = false;
 bool flag = false;
 if ((this.byteBuffer[0] == 0xfe) && (this.byteBuffer[1] == 0xff))
 {
  this.encoding = new UnicodeEncoding(true, true);
  this.CompressBuffer(2);
  flag = true;
 }
 else if ((this.byteBuffer[0] == 0xff) && (this.byteBuffer[1] == 0xfe))
 {
  if (((this.byteLen < 4) || (this.byteBuffer[2] != 0)) || (this.byteBuffer[3] != 0))
  {
 this.encoding = new UnicodeEncoding(false, true);
 this.CompressBuffer(2);
 flag = true;
  }
  else
  {
 this.encoding = new UTF32Encoding(false, true);
 this.CompressBuffer(4);
 flag = true;
  }
 }
 else if (((this.byteLen >= 3) && (this.byteBuffer[0] == 0xef)) && ((this.byteBuffer[1] == 0xbb) && (this.byteBuffer[2] == 0xbf)))
 {
  this.encoding = Encoding.UTF8;
  this.CompressBuffer(3);
  flag = true;
 }
 else if ((((this.byteLen >= 4) && (this.byteBuffer[0] == 0)) && ((this.byteBuffer[1] == 0) && (this.byteBuffer[2] == 0xfe))) && (this.byteBuffer[3] == 0xff))
 {
  this.encoding = new UTF32Encoding(true, true);
  this.CompressBuffer(4);
  flag = true;
 }
 else if (this.byteLen == 2)
 {
  this._detectEncoding = true;
 }
 if (flag)
 {
  this.decoder = this.encoding.GetDecoder();
  this._maxCharsPerBuffer = this.encoding.GetMaxCharCount(this.byteBuffer.Length);
  this.charBuffer = new char[this._maxCharsPerBuffer];
 }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

更多精彩内容其他人还在看

C# SendInput 模拟鼠标操作的实现方法

C# SendInput 模拟鼠标操作的实现方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

C#中 paint()与Onpaint()的区别

paint是事件onpaint方法onpaint方法是调用paint事件的,用哪一个,效果是一样,就看那一个方便了内部是这样实现的:
收藏 0 赞 0 分享

c#中GetType()与Typeof()的区别

c#中GetType()与Typeof()的区别,需要的朋友可以参考一下
收藏 0 赞 0 分享

将字符串转换成System.Drawing.Color类型的方法

将字符串转换成System.Drawing.Color类型的方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

C# 抓取网页内容的方法

C# 抓取网页内容的方法,需要的朋友可以参考一下
收藏 0 赞 0 分享

基于C#后台调用跨域MVC服务及带Cookie验证的实现

本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下
收藏 0 赞 0 分享

使用C#获取远程图片 Form用户名与密码Authorization认证的实现

本篇文章介绍了,使用C#获取远程图片 Form用户名与密码Authorization认证的实现。需要的朋友参考下
收藏 0 赞 0 分享

Winform跨线程操作的简单方法

线程间操作无效:从不是创建控件“label1”的线程访问它
收藏 0 赞 0 分享

C# WINFORM 强制让窗体获得焦点的方法代码

C# WINFORM 强制让窗体获得焦点的方法代码,需要的朋友可以参考一下
收藏 0 赞 0 分享

C#中方括号[]的语法及作用介绍

C#中方括号[]可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。
收藏 0 赞 0 分享
查看更多