0

我有一个网站和 Unity 项目,它们通过使用 Web 套接字的 Web 服务器相互通信。我正在编码/解码我使用 json 发送的消息。在 Unity 方面,我将 Newtonsoft 用于 json,将 websocketsharp 用于 WebSocket。消息发送正常,一切正常,但现在我正在尝试在 Unity 中实现表情符号以正确显示。我能够创建所有表情符号的精灵表,创建一个字典,其中键是它们的 Unicode,值是它们在精灵表中的位置。问题是当我收到一个表情符号(例如表情符号 Unicode:U+1F910)时,Unity 将其接收为“\uD83E\uDD10”。有没有办法将表情符号作为其 Unicode 的字符串文字发送?如果没有,有没有办法将 c# 解释的 Unicode 解析回原始 Unicode?我发现正则表达式将更常见的符号从上述格式转换回相应的符号,但没有将 Unicode 作为字符串返回给我。这是我目前用来执行此操作的方法:

var result = Regex.Replace(
            arrivedMessages[0],
                @"\\[Uu]([0-9A-Fa-f]{4})",
                m => char.ToString(
                (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier)));

使用上面的代码,如果用户要发送一个符号,例如 º,解码后的 json 将读取 \u00ba,但上面的正则表达式会将其转换回 º。当我尝试发送表情符号(例如符号)时,json 将读取“\ud83e\udd10”,正则表达式结果将为空白。正则表达式有问题吗?还是有更好的方法来做到这一点?谢谢!

编辑:

为了简化整个问题:有没有办法将 "\uD83E\uDD10" 转换回 Unicode "U+1F910" 的字符串文字

4

1 回答 1

0

正如@Mr Lister 指出的那样,这是我最终用来转换代理对的函数:

        string returnValue = "";

        for (var i = 0; i < SurrogatePairString.Length; i += char.IsSurrogatePair(SurrogatePairString, i) ? 2 : 1)
        {
            var codepoint = char.ConvertToUtf32(SurrogatePairString, i);

            // keep it uppercase for the regex, then when it is found, .ToLower()
            returnValue = String.Format("U+{0:X4}", codepoint);
        }
于 2019-03-09T22:39:11.253 回答