在同一电脑的情况下,同样的JSON文件,json文件试过ASCII、UTF8两种编码格式保存,在.NET5使用StreamReader读取乱码,winFrom读取正常。
以下是.NET 5+C#+WebApi,用StreamReader
StreamReader streamReader = new StreamReader(path,Encoding.UTF8);//UTF8这里试过ASCII、Default,或者第二个参数不填
string jsonStr = streamReader.ReadToEnd();
Console.WriteLine(Encoding.Default.EncodingName);//输出 Unicode (UTF-8)
Console.WriteLine(streamReader.CurrentEncoding);//输出 system.Text.UTF8Encoding+UTF8EncodingSealed
Console.WriteLine(jsonStr);//输出 "ok": {"errcode": 0,"errmsg": "?????"},这里中文是乱码
以下是.NET Framework 4+C#+WinFrom,用StreamReader
StreamReader streamReader = new StreamReader(path,Encoding.UTF8);
string jsonStr = streamReader.ReadToEnd();
Console.WriteLine(Encoding.Default.EncodingName);//输出 简体中文(GB2312)
Console.WriteLine(streamReader.CurrentEncoding);//输出 System.Text.UTF8Encoding
Console.WriteLine(jsonStr);//输出 "ok": {"errcode": 0,"errmsg": "成功"},这里中文是正常
请问怎样才能让.NET5使用StreamReader读取正常。
//以下为json数据
{
"ok": {"errcode": 0,"errmsg": "成功"}
}
产生这个问题的原因是.net5 没有识别出文件内容是GB2312,所以读取文件时可以指定为GB2312,代码如下:
StreamReader streamReader = new StreamReader(path, Encoding.GetEncoding("GB2312"));
只添加这个代码.net5运行会提示“GB2312”is not supported encoding name,因此还需要安装一下System.Text.Encoding.CodePages。具体使用代码如下:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
StreamReader streamReader = new StreamReader(path, Encoding.GetEncoding("GB2312"));
原先的思路是 Encoding.UTF8 , 这种方式乱码。
感谢sanyuni,因我的文件是用UTF-8编码的,套用了代码思路,最终如下:
StreamReader streamReader = new StreamReader(path, Encoding.GetEncoding("UTF-8"));