C# Unicode字符串

C# Unicode字符串,c#,unicode,C#,Unicode,我有以下字符串 string s = "\\u0625\\u0647\\u0644"; 当我打印上述序列时,我得到: \u0625\u0647\u062 如何获得真正的可打印Unicode字符而不是此\uxxx表示 我找到了答案: s = System.Text.RegularExpressions.Regex.Unescape(s); 尝试Regex: String inputString = "\\u0625\\u0647\\u0644"; var stringBuilder =

我有以下
字符串

string s = "\\u0625\\u0647\\u0644";
当我打印上述序列时,我得到:

\u0625\u0647\u062
如何获得真正的可打印Unicode字符而不是此\uxxx表示


我找到了答案:

s = System.Text.RegularExpressions.Regex.Unescape(s);

尝试
Regex

String inputString = "\\u0625\\u0647\\u0644";

var stringBuilder = new StringBuilder();
foreach (Match match in Regex.Matches(inputString, @"\u([\dA-Fa-f]{4})"))
{
    stringBuilder.AppendFormat(@"{0}", 
                               (Char)Convert.ToInt32(match.Groups[1].Value));
}

var result = stringBuilder.ToString();

如果确实无法控制字符串,则需要将这些转义序列替换为其值:

Regex.Replace(s, @"\u([0-9A-Fa-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());

希望你没有
\\
在那里转义。

我建议使用
字符串。规范化
。你可以在这里找到一切:


我有以下字符串“\u0001”,我想得到它的值
我试了很多,但这对我来说是有效的

int val = Convert.ToInt32(Convert.ToChar("\u0001")); // val = 1;
如果您有多个字符,可以使用以下技术

var original ="\u0001\u0002";
var s = "";
for (int i = 0; i < original.Length; i++)
{
    s += Convert.ToInt32(Convert.ToChar(original[i]));
}

// s will be "12"
var original=“\u0001\u0002”;
var s=“”;
for(int i=0;i
我觉得这个问题有点模糊,你能控制这个字符串吗?如果是,只需删除其中一个反斜杠,即“\u1234\u5678”。如果不是,你应该考虑使用ReGEX使用回调方法解析数字,将其转换为字符,然后将该字符返回为字符串“你不能控制字符串”的意思。您的场景是什么?好的,我找到了答案:System.Text.RegularExpressions.Regex.Unescape()您如何选择另一种方式,即从包含Unicode字符的未转义字符串到\\uxxx转义形式?PS:我尝试过明显的
Regex.Escape(…)
方法,但它不适用于以下情况:番茄酱@marcardeson请将您的解决方案添加为答案,并将其标记为已接受,以便其他人清楚地看到是什么解决了您的问题。正确的答案是System.Text.RegularExpressions.Regex.Unescape()我认为MatchEvaluator应该是:
m=>((char)Convert.ToInt32(m.Groups[1].Value,16)).ToString()
@marcanderson毫无疑问,“works”和“correct answer”没有关系。引发的异常:十六进制数字不足。
Normalize
进行Unicode规范化,这是一个完全不同的概念。