如何用十六进制表示形式替换任意内联unicode字符?

时间:2018-10-23 11:47:26

标签: c# .net utf

如何将以下字符串从“ 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;
    }

1 个答案:

答案 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世界