this.治疗完毕

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#读取文本文件出现乱码

在写c#代码的时候,遇到一个问题,在使用File.ReadAllText()打开文本文件的时候,调试发现打开的文本是乱码,我生成的这个文本文件是在c++程序下,以多字节格式生成的,然后保存的一个文本,c# 使用File.ReadAllText()读取这个文本的时候没有指定字符集。

解决方法:

1.使用File.ReadAllText()读取文件:

File.ReadAllText(strfilename,System.Text.Encoding.Default)        //在后面加上默认字符集,strfilename指的是文件的路径加名称(包括后缀名)

 

2.使用FileStream和  StreamReader

 FileStream fs = new FileStream(strfilename, FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
 StreamReader sr = new StreamReader(fs, Encoding.Default);            //在后面加上默认字符集

 

实现打开并识别两种字符集(unicode和多字节)的文本,然后根据判断文本的内容,进行其他操作

// 获取测试结果  
                  if (File.Exists(ti.Path + "\\TestResult.txt"))//更改字符集不同的读取的乱码,导致测试结果无法读取的问题,  
                  {  
                      string data_back = File.ReadAllText(ti.Path + "\\TestResult.txt");   //读取UNICODE文本,如果文本是多字节则出现乱码——sxl  
                      string path = ti.Path + "\\TestResult.txt";  
                      FileStream fs = new FileStream(path, FileMode.Open,FileAccess.Read,FileShare.ReadWrite);  
                      StreamReader sr = new StreamReader(fs, Encoding.Default);         //用于支持读取多字节文本,防止乱码--sxl  
                      string data = sr.ReadLine();  
                      if (!string.IsNullOrEmpty(data) && (data.Contains("测试成功") || data_back.Contains("测试成功")))   //上面通过两种方式读取文本文件,如果不为空并且任何一种方式读取到测试结果文本,则测试成功--sxl  
                      {  
                          ti.Result = (int)TestResult.Success;  
                          dgvTestPrograms.Rows[i].Cells["Result"].Value = "测试成功";  
                          dgvTestPrograms.Rows[i].DefaultCellStyle.BackColor = Color.Green;  
                      }  
                      else  
                      {  
                          ti.Result = (int)TestResult.Fail;  
                          dgvTestPrograms.Rows[i].Cells["Result"].Value = "测试失败";  
                          dgvTestPrograms.Rows[i].DefaultCellStyle.BackColor = Color.Red;  
                      }  
                      fs.Close();//  new的对象没有关闭导致测试结果文本被进程占用,无法上传的问题  
                      sr.Close();  
                  }  

 

posted on 2018-05-31 15:06  this.治疗完毕  阅读(1047)  评论(0)    收藏  举报