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规范化,这是一个完全不同的概念。