将表情符号打包为纯文本 unicode 字符串 php

Packing an emoji as plain text unicode string php

我有一个网站和 Unity 项目,它们通过使用网络套接字的网络服务器相互通信。我是 encoding/decoding 我使用 json 发送的消息。在 Unity 方面,我为 json 使用 Newtonsoft,为 WebSockets 使用 websocketsharp。消息发送正常,一切正常,但现在我正在尝试在 Unity 中实现表情符号以正确显示。我能够为所有表情符号创建一个 sprite sheet,创建一个字典,键是它们的 Unicode,值是它们在 sprite sheet 中的位置。问题是,当我收到表情符号(例如表情符号 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"

的字符串文字

正如@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);
        }