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(); }
浙公网安备 33010602011771号