static Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled);
public static string Decode(string s)
{
return reUnicode.Replace(s, m =>
{
short c;
if (short.TryParse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c))
{
return "" + (char)c;
}
return m.Value;
});
}
正则和js中的一样, 将XXXX
转换以16进制System.Globalization.NumberStyles.HexNumber
解析为short
类型, 然后直接(char)c
就能转换成对应的字符, "" + (char)c
用于转换成字符串类型返回.
由于正则中也有\uXXXX
, 所以需要写成\\uXXXX
来表示匹配字符串\uXXXX
, 而不是具体的字符.
上面使用到了Lambda, 需要至少dotnet 4的SDK才能编译通过, 可以在dotnet 2下运行.