如何解码字符串中的Unicode字符

时间:2012-02-15 23:33:00

标签: c#

如何在C#中解码此字符串'Sch \ u00f6nen'(@"Sch\u00f6nen"),我尝试了HttpUtility,但它没有给我我需要的结果,即“Schönen”。

3 个答案:

答案 0 :(得分:46)

Regex.Unescape做了诀窍:

System.Text.RegularExpressions.Regex.Unescape(@"Sch\u00f6nen");

请注意,在测试变体或编写单元测试时需要小心:"Sch\u00f6nen"已经"Schönen"。您需要在字符串前面@\u00f6视为字符串的一部分。

答案 1 :(得分:2)

如果您因为看到"Sch\u00f6nen"(或字符串常量中的类似\uXXXX值)而登陆此问题 - 它不是编码。这是一种将Unicode字符表示为转义序列的方法,类似于字符串表示新行\n和返回\r

我认为你不必解码。

string unicodestring = "Sch\u00f6nen";
Console.WriteLine(unicodestring);
Schönen被输出了。

答案 2 :(得分:0)

编写了将unicode字符串转换为实际字符的代码。 (但是,该主题的最佳答案很好,而且不太复杂。)

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;
    }
}