gpt4 book ai didi

C# UTF8 输出保持编码字符完整

转载 作者:行者123 更新时间:2023-11-30 15:10:50 25 4
gpt4 key购买 nike

我有一个非常简单的问题,我似乎无法理解。

我有一个正确编码的 UTF8 字符串,我使用 Json.NET 解析为 JObject,摆弄一些值并将其写入命令行,保持编码字符完整。

除了保持编码字符完整的部分外,一切都很好。

代码:

var json = "{roster: [[\"Tulg\u00f4r\", 990, 1055]]}";
var j = JObject.Parse(json);
for (int i = 0; i < j["roster"].Count(); i++)
{
j["roster"][i][1] = ((int)j["roster"][i][1]) * 3;
j["roster"][i][2] = ((int)j["roster"][i][2]) * 3;
}
Console.WriteLine(JsonConvert.SerializeObject(j, Formatting.None));

实际输出:

{"roster":[["Tulgôr",2970,3165]]}

期望的输出:

{"roster":[["Tulg\u00f4r",2970,3165]]}

我在 Google 中的措辞似乎不合适,因为没有找到有用的信息。我敢肯定这是一件 super 简单的事情,之后我会觉得自己很愚蠢。 :)

最佳答案

从 JsonConvert.SerializeObject 获取输出并通过一个辅助方法运行它,该方法将所有非 ASCII 字符转换为它们的转义字符(“\uHHHH”)等价物。下面给出了一个示例实现。

// Replaces non-ASCII with escape sequences;
// i.e., converts "Tulgôr" to "Tulg\u00f4r".
private static string EscapeUnicode(string input)
{
StringBuilder sb = new StringBuilder(input.Length);
foreach (char ch in input)
{
if (ch <= 0x7f)
sb.Append(ch);
else
sb.AppendFormat(CultureInfo.InvariantCulture, "\\u{0:x4}", (int) ch);
}
return sb.ToString();
}

你可以这样调用它:

Console.WriteLine(EscapeUnicode(JsonConvert.SerializeObject(j, Formatting.None)));

(注意我没有专门处理非BMP字符,因为我不知道你的第三方应用在表示U的时候是想要“\U00010000”还是“\uD800\uDC00”(或者别的什么!) +10000.)

关于C# UTF8 输出保持编码字符完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com