2012-07-28 189 views
17

我有以下String字符。Unicode字符字符串

string s = "\\u0625\\u0647\\u0644"; 

当我打印上面的顺序,我得到:

\u0625\u0647\u062 

我怎样才能得到真正的可打印Unicode字符,而不是该为\ uXXXX表示?


我已经找到了答案:

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

我觉得这个问题有点模糊,你控制的是字符串?如果是这样,只需删除其中一个反斜杠,即。 “\ u1234 \ u5678”。如果没有,你应该考虑使用带回调方法的正则表达式来解析数字,将其转换为字符,然后以字符串的形式返回该字符 – Onkelborg 2012-07-28 12:01:25

+0

“你不能控制字符串”是什么意思?你的场景是什么? – 2012-07-28 12:04:37

+1

好吧,我找到了答案:System.Text.RegularExpressions.Regex.Unescape() – 2012-07-28 12:07:06

回答

1

尝试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(); 
3

如果你真的不控制字符串,那么你需要替换这些转义序列的值:

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

,并希望你也没有\\逃跑。

+1

有效的正确答案是System.Text.RegularExpressions.Regex.Unescape() – 2012-07-28 12:07:52

+0

这不仅仅是替换那些Unicode转义符... – Joey 2012-07-28 12:15:55

+1

我相信MatchEvaluator应该是:'m =>((char)Convert .ToInt32(m.Groups [1] .Value,16)).ToString()'。 – Otiel 2014-04-17 09:00:04