lzlylfsh
2021-03-17 15:46
采纳率: 100%
浏览 105

在.NET5使用StreamReader读取乱码,winFrom读取正常。

 在同一电脑的情况下,同样的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": "成功"}
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • sanyuni 2021-03-23 10:21
    已采纳

    产生这个问题的原因是.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"));
    已采纳该答案
    评论
    解决 2 无用
    打赏 举报
  • lzlylfsh 2021-04-10 16:10

    原先的思路是 Encoding.UTF8 , 这种方式乱码。

    感谢sanyuni,因我的文件是用UTF-8编码的,套用了代码思路,最终如下:

    StreamReader streamReader = new StreamReader(path, Encoding.GetEncoding("UTF-8"));
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题