Unicode字符字符串
问题描述:
我有以下String
字符。Unicode字符字符串
string s = "\\u0625\\u0647\\u0644";
当我打印上面的顺序,我得到:
\u0625\u0647\u062
我怎样才能得到真正的可打印Unicode字符,而不是该为\ uXXXX表示?
我已经找到了答案:
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());
,并希望你也没有\\
逃跑。
答
我会建议使用String.Normalize
。你可以找到这里的一切:
+1
'Normalize'确实实现了Unicode规范化,这是一个完全独立的概念。 – Joey 2012-07-28 13:01:17
我觉得这个问题有点模糊,你控制的是字符串?如果是这样,只需删除其中一个反斜杠,即。 “\ u1234 \ u5678”。如果没有,你应该考虑使用带回调方法的正则表达式来解析数字,将其转换为字符,然后以字符串的形式返回该字符 – Onkelborg 2012-07-28 12:01:25
“你不能控制字符串”是什么意思?你的场景是什么? – 2012-07-28 12:04:37
好吧,我找到了答案:System.Text.RegularExpressions.Regex.Unescape() – 2012-07-28 12:07:06