2012-07-28 249 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