我有一个网站和Unity项目,它们通过使用Web套接字的Web服务器相互通信。我正在对使用json发送的消息进行编码/解码。在Unity方面,我将Newtonsoft用于json,将websocketsharp用于WebSockets。消息发送正常,一切正常,但是现在我试图在Unity中实现表情符号以正确显示。我能够创建一个包含所有表情符号的Sprite表,创建一个字典,其键为Unicode,值作为其在Sprite表中的位置。问题是,当我收到表情符号(例如,表情符号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”的字符串文字
答案 0 :(得分: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);
}