首页 > 解决方案 > 如何将这样的 U+1F61A Unicode 字符串转换为 0x1F600

问题描述

我的代码就是这样

    private IEnumerable<int> CombineSurrogates(string value)
    {
        if (null == value)
        {
            yield break; // or throw new ArgumentNullException(name(value));
        }

        for (int i = 0; i < value.Length; ++i)
        {
            char current = value[i];
            char next = i < value.Length - 1 ? value[i + 1] : '\0';

            if (char.IsSurrogatePair(current, next))
            {
                yield return char.ConvertToUtf32(current, next);

                i += 1;
            }
            else
            {
                yield return current;
            }
        }
    }

    private string DecodeEncodedNonAsciiCharacters(string value)
    {
        return string.Join(" ", CombineSurrogates(value).Select(code => $"U+{code:X4}"));
    }
    string dn = DecodeEncodedNonAsciiCharacters("");
    Console.WriteLine(dn);

它返回 U+1F61A,所以我需要帮助编写一个将 U+1F61A 转换为 0x1F600 的函数。所以我可以为我可用的其他表情符号执行此操作。

因为我正在使用名为 NetUnicodeInfo 的第三方 dll 来获取表情符号的名称。

private string PrintCodePointInfo(int codePoint)
    {
        var charInfo = UnicodeInfo.GetCharInfo(codePoint);
        return charInfo.Name ?? charInfo.OldName;
    }
    PrintCodePointInfo(0x1F600);

因为 codePoint 是一个 int,所以我需要将 U+1F61A 转换为 0x1F600。

标签: c#unicodeemoji

解决方案


你应该这样做

return string.Join(" ", CombineSurrogates(value).Select(code => $"0x{code:X4}"));

参考:MSDN 上的十六进制 ("X") 格式说明符


推荐阅读