【问题标题】:JsonNode.Parse: error parsing text with accentsJsonNode.Parse:解析带有重音符号的文本时出错
【发布时间】:2022-01-22 21:13:03
【问题描述】:

我正在尝试使用 System.Text.Json 类中 JsonNode 的 Parse 方法解析拉丁文本。

但是当文本包含重音符号时,该方法返回转义字符。

var jsonString = File.ReadAllText(path, Encoding.GetEncoding(1252));                   
var jTemplate = JsonNode.Parse(jsonString);

对象“jsonString”包含正确的文本(带重音符号),但是当我调用 JsonNode.Parse 时,对象“jTemplate”包含错误的文本

jsonString 中的“Ciberseguridad en laorganización”

“Ciberseguridad en la organizaci\u00F3n”在 jTemplate 中

我也尝试过其他编码和代码页,例如 UTF8 具有相同的结果...

¿知道如何解析带有重音符号的文本吗?

提前致谢。

【问题讨论】:

    标签: c# parsing system.text.json codepages utf8json


    【解决方案1】:

    目前JsonNode.Parse() 不提供设置Encoder similar to JsonSerializer 的方法。

    你有两个选择:

    1. 改用JsonSerializer 并按照上面链接中的提示进行操作。

    2. 在使用JsonNode解析字符串值后取消转义:

      var expectedValue = Regex.Unescape(jTemplate["key"].ToString());
      

    【讨论】:

      【解决方案2】:

      我可以为您提供使用 JsonSerializer.Deserialize 方法,该方法接受 JsonSerializerOptions 对象,您可以在其中设置编码器。

      我的代码示例的输出是:

      Ciberseguridad en laorganización

      using System.Text.Encodings.Web;
      using System.Text.Json;
      using System.Text.Unicode;
      
      string jsonString = "{\"data\": \"Ciberseguridad en la organización\"}";
      JsonSerializerOptions options = new JsonSerializerOptions()
      {
          Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
      };
      DataDto? jTemplate = JsonSerializer.Deserialize<DataDto>(jsonString, options);
      Console.WriteLine(jTemplate.data);
      
      class DataDto
      {
          public string data { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-30
        • 2020-02-08
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 2012-05-13
        • 2012-01-14
        相关资源
        最近更新 更多