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

在.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"));
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行