如何将以下字符串从“ hello ️️ world”转换为“ hello 1F610 1F441 FE0F 200D 1F5E8 FE0F world”。
我尝试过的事情:
var str = "hello ️️ world";
var regex = new Regex(@"(\p{Cs}\p{Cs})");
var newStr = regex.Replace(str, m => UnicodeToString(m.Groups[1].Value));
string UnicodeToString(string value)
{
var b = Encoding.UTF32.GetBytes(value);
var str = string.Join("", b.Select(x => { return x.ToString("x");}));
return str;
}
答案 0 :(得分:1)
似乎无法使用正则表达式来执行我想要的操作。我能够使用unicode.net并遍历代码点来获取我需要的所有unicode元素。
var seq = "hello ️️ world".Codepoints();
foreach(var cp in seq)
{
if(cp.AsUtf32 < 127)
{
sb.Append(cp.AsString());
}
else
{
sb.Append(cp.ToString().Replace("U+", "") + " ");
}
}
sb.ToString().Dump();
输出: 你好1F601 1F441 FE0F 200D 1F5E8 FE0F世界