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

 更新时间:2015年05月05日 09:55:36   作者:work24  
这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了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#/VB.NET 自定义PPT动画路径的步骤

    C#/VB.NET 自定义PPT动画路径的步骤

    这篇文章主要介绍了C#/VB.NET 自定义PPT动画路径的步骤,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-05-05
  • 使用C#快速搭建一个在windows运行的exe应用

    使用C#快速搭建一个在windows运行的exe应用

    这篇文章主要介绍了使用C#快速搭建一个在windows运行的exe应用,这是一个比较旧的内容,但是一直都没有空写,今天花点时间,把我掌握的C# 分享给初学的人或者感兴趣的人,希望能对你有一定帮助,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • C# .net实现货币转换示例

    C# .net实现货币转换示例

    这篇文章主要介绍了C# .net实现货币转换,其中包含了try catch、switch语句的运用,对于C#初学者有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C#中Span相关的性能优化建议

    C#中Span相关的性能优化建议

    Span 是C#7.2引入的一种新类型,在.NET Core 2.1运行时中受支持,Span 提供对内存连续区域的类型安全访问,这篇文章主要给大家介绍了关于C#中Span相关的一些性能优化建议,需要的朋友可以参考下
    2021-08-08
  • 浅析WPF中Binding的数据校验和类型转换

    浅析WPF中Binding的数据校验和类型转换

    在WPF开发中,Binding实现了数据在Source和Target之间的传递和流通,那在WPF开发中,如何实现数据的校验和类型转换呢,下面就跟随小编一起学习一下吧
    2024-03-03
  • C#控制台程序输出等腰三角形并居中显示实例

    C#控制台程序输出等腰三角形并居中显示实例

    这篇文章主要介绍了C#控制台程序输出等腰三角形并居中显示实例,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03
  • C# 创建高精度定时器的示例

    C# 创建高精度定时器的示例

    这篇文章主要介绍了C# 创建高精度定时器的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • C#中把日志导出到txt文本的简单实例

    C#中把日志导出到txt文本的简单实例

    这篇文章介绍了C#中把日志导出到txt文本的简单实例,有需要的朋友可以参考一下
    2013-10-10
  • 解析数字签名的substring结构(获取数字签名时间)

    解析数字签名的substring结构(获取数字签名时间)

    解析数字签名的substring结构,大家参考使用吧
    2013-12-12
  • C#中Invoke和BeginInvoke区别小结

    C#中Invoke和BeginInvoke区别小结

    有时候,我们不得不跨线程调用主界面的控件来进行操作,所以为了方便的解决问题,.net为我们提供了Invoke 与beginInvoke,那么Invoke和BeginInvoke区别在哪,本文就来详细的介绍一下
    2023-08-08

最新评论