先说问题:
在使用C#解析文本文件时,出现了乱码,但是不是中文乱码,大体如下:
原文:
乍看没问题,下面看解析:
横线乱码了!!!!有部分数据还有中文,但是中文没有乱码。
我是这样写的,上图片吧,错误代码放上没有意义:
解决过程
1、网上查查,发现都是让在new StreamReader的时候添加编码,Encoding.Default。使用系统默认编码格式就可以了。艹,骗鬼呢。也可能是大家遇到的问题不一样吧。×
2、分析了一下文件编码格式。我是使用系统文本编辑器打开,另存的方式查看默认编码格式的。
ANSI???是什么,不重要。我采取这种格式读取不就可以了吗,暗喜。
StreamReader sr = new StreamReader(realPath, Encoding.AN?)
点不出来,编码库中没有找到这种编码。×
3、为了解决问题,我先把文件另存一下,另存为UTF-8后,一切正常了。
4、有时间了,就想把这个问题解决掉。
我使用UTF-8、Unicode、GBK……解码都失败了。尤其是GBK,被我抓了异常:
然后我就去解决GBK不支持的问题了O(∩_∩)O哈哈~
感谢 WebEnh 这位朋友的一片文章 .NET Core 中使用GBK GB2312编码报错的问题 !
虽然我没有按照其中的方法解决我的问题,但是间接解决了我的问题。因为我是创建了一个C#的控制台应用程序进行测试的。
我在执行文件读取之前,先注册了一下编码库,然后使用GBK读取:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
StreamReader sr = new StreamReader(realPath, Encoding.GetEncoding("GBK"));
问题解决了。√
并且我进行了四种编码格式的读取测试:
问题解决!!!
下面贴上我的调试代码:
class Program
{
static void Main(string[] args)
{
// 路径为相对路径,文件就不上传,诸君可以自己写几种编码格式文件测试
string realPath = @".\第四次测量 - ANSI.dat";
NewMethod(realPath);
realPath = @".\第四次测量 - Unicode.dat";
NewMethod(realPath);
realPath = @".\第四次测量 - GB2312.dat";
NewMethod(realPath);
realPath = @".\第四次测量 - UTF_8.dat";
NewMethod(realPath);
}
private static void NewMethod(string realPath)
{
try
{
// 获取文件名
int start = realPath.LastIndexOf('\\');
int end = realPath.Length - 1;
Console.WriteLine(realPath.Substring(start, end - start + 1));
// 乱码处理
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using (StreamReader sr = new StreamReader(realPath, Encoding.GetEncoding("GBK")))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
throw new Exception("DAT 样本文件解析异常:" + e.Message);
}
}
}
谢谢浏览 (* ̄︶ ̄) (* ̄︶ ̄) (* ̄︶ ̄)。