You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Newtonsoft.Json反序列化后单引号显示为’的解决方法咨询

解决Newtonsoft.Json反序列化后单引号乱码为’的问题

这个乱码问题其实很常见——你看到的’是UTF-8编码的单引号’(右单引号,不是普通的')被错误地用Windows-1252(或类似单字节编码)解析后的结果。咱们从根源和解决方案两部分来处理:

问题根源

大概率是你获取sJsonCode的环节出了编码问题:

  • 如果是从文件、网络请求或者流中读取JSON内容时,没有指定UTF-8编码,而是用了系统默认编码(比如Windows下的GBK或Windows-1252),导致UTF-8的字符被错误解码,后续反序列化自然会保留乱码。
  • 少数情况是JSON本身的编码声明和实际编码不匹配,但Newtonsoft.Json默认会正确处理UTF-8的JSON。

解决方案

1. 从源头确保JSON字符串用UTF-8解码

这是最根本的解决方式,避免乱码产生:

  • 如果从文件读取:
string sJsonCode = File.ReadAllText("yourJsonFile.json", Encoding.UTF8);
  • 如果从网络请求获取(比如HttpClient):
var response = await httpClient.GetAsync("yourApiUrl");
string sJsonCode = await response.Content.ReadAsStringAsync(); // HttpClient默认用UTF-8,若接口有特殊声明可手动指定
  • 如果从字节数组转字符串:
byte[] jsonBytes = ...; // 你的JSON字节数据
string sJsonCode = Encoding.UTF8.GetString(jsonBytes);

2. 修复已经乱码的字符串

如果sJsonCode已经是乱码状态,没法重新获取,也可以把乱码的字符串转回来:

foreach (var message in jsonData["messages"]) {
    string body = message.body.ToString();
    // 将错误编码的字符串转回UTF-8
    byte[] wrongBytes = Encoding.GetEncoding(1252).GetBytes(body);
    string correctedBody = Encoding.UTF8.GetString(wrongBytes);
    listBox1.Items.Add(correctedBody);
}

3. 直接从字节流反序列化(更可靠)

跳过中间字符串转换环节,直接用UTF-8解码字节流后反序列化,避免编码丢失:

byte[] jsonBytes = ...; // 从文件/网络获取的原始字节
var jsonData = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(jsonBytes));

验证步骤

你可以先在反序列化前输出sJsonCode的内容,看看里面的单引号是不是已经是’了:

Console.WriteLine(sJsonCode); // 检查原始JSON字符串是否已经乱码

如果原始字符串就乱码,那肯定是获取环节的问题,优先用方案1解决;如果原始字符串正常,反序列化后才乱码,那可以检查Newtonsoft.Json的配置(不过这种情况极少)。

内容的提问来源于stack exchange,提问作者Nick_F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:35:37