版权声明:需要转载的请注明出处 https://blog.csdn.net/qq_22642239/article/details/78687086
在写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();
}