我该如何在C#中解码字符串 'Sch\u00f6nen' (@"Sch\u00f6nen"
)? 我已尝试使用HttpUtility,但它没有给我需要的结果,即 "Schönen"。
我该如何在C#中解码字符串 'Sch\u00f6nen' (@"Sch\u00f6nen"
)? 我已尝试使用HttpUtility,但它没有给我需要的结果,即 "Schönen"。
Regex.Unescape
解决了这个问题:
System.Text.RegularExpressions.Regex.Unescape(@"Sch\u00f6nen");
请注意,在测试变量或编写单元测试时需要小心:"Sch\u00f6nen"
已经是 "Schönen"
。您需要在字符串前面加上@
以将\u00f6
视为字符串的一部分。
@
已经解决了我的问题。非常感谢你。 - Bubblesstring unicodestring = "Sch\u00f6nen";
Console.WriteLine(unicodestring);
输出了 Schönen。
string unicodestring = "Sch\\u00f6nen";
更新您的示例,您将得到@M_K所说的情况。当从远程端点检索JSON结果时,这种情况很常见。 - Mladen B.string stringWithUnicodeSymbols = @"{""id"": 10440119, ""photo"": 10945418, ""first_name"": ""\u0415\u0432\u0433\u0435\u043d\u0438\u0439""}";
var splitted = Regex.Split(stringWithUnicodeSymbols, @"\\u([a-fA-F\d]{4})");
string outString = "";
foreach (var s in splitted)
{
try
{
if (s.Length == 4)
{
var decoded = ((char) Convert.ToUInt16(s, 16)).ToString();
outString += decoded;
}
else
{
outString += s;
}
}
catch (Exception e)
{
outString += s;
}
}
length == 4
的检查,几乎可以确定对于一些像\uAAAAAAA\uAAAA
这样在Unicode字符之间有长度为4的字符串的情况,结果可能是错误的。但核心转换已经足够好,可以编写一个解析器。 - Cory-G