繁体   English   中英

JsonNode.Parse:解析带有重音符号的文本时出错

[英]JsonNode.Parse: error parsing text with accents

我正在尝试使用 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 la Organización”

jTemplate 中的“Ciberseguridad en la Organizaci\ón

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

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

提前致谢。

目前JsonNode.Parse()没有提供类似于 JsonSerializer 的设置Encoder的方法。

您有两个选择:

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

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

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

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

我的代码示例的输出是:

Ciberseguridad en la Organizació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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM