簡體   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