我有一个非常简单的问题,我似乎无法理解。
我有一个正确编码的 UTF8-String,我使用 Json.NET 解析为 JObject,摆弄一些值并将其写入命令行,保持编码字符完整。
除了保持编码字符完整之外,一切都很好。
Code:
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]]}
看来我在谷歌中的措辞不合适,因为没有出现任何有用的结果。我确信这是非常简单的事情,之后我会觉得自己很愚蠢。 :)
获取 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+10000 时是否需要“\U00010000”或“\uD800\uDC00”(或其他内容!)。 )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)