在 C# 中将转义的 unicode 更改为字符串

本文关键字:字符串 unicode 转义 | 更新日期: 2023-09-27 18:32:06

在 c# 中我有

string x = @"'u0044'u0068'uD83D'uDE07'u90FD'u5728"

我需要把它变成:

Dh  都在

我该怎么做?具体来说,我如何知道 ''uD83D''uDE07 何时是一个字符而不是两个字符?

在 C# 中将转义的 unicode 更改为字符串

您可能必须将每个字符表示形式解析为int,然后转换为char

string x = @"'u0044'u0068'uD83D'uDE07'u90FD'u5728";
var chars = x.Split(new[]{@"'u"}, StringSplitOptions.RemoveEmptyEntries)
    .Select(c => (char)Convert.ToInt32(c, 16))
    .ToArray();
var output = new string(chars);
// output = Dh  都在

我知道Newtonsoft json.net 会转换,所以我会使用它,如果这是我的一个项目,并且我已经引用了它:

using Newtonsoft.Json;
var output = new JsonTextReader(new StringReader($"'"{x}'"")).ReadAsString();
//output = Dh  都在

优点是它也可以处理非Unicode字符,即 "Z'u0044" -> "ZD" .缺点是,在当前状态下,它无法处理非Unicode字符,例如引号:"A'"B"将失败。