IOS不能正确解码JSON格式的表情符号unicode的,表情图标显示为正方形(IOS cannot

2019-07-18 14:49发布

我工作的一个iPhone应用程序,它允许人们与绘文字图标发送消息。 我在MySQL与字符集utf8mb4和整理utf8mb4_unicode_ci保存图标,所有表情符号图标在我的数据库正确保存。 然而,当我返回JSON返回给客户端(PHP json_encode),表情符号编码为这样的:“\ ud83d \ ude04”,和iPhone显示为一个正方形。 不过,如果我回来作为XML,表情符号图标不会成为unicode的是这样的:“\ ud83d \ ude04”,它将是图标。

我想知道,如果这是一个问题,我的服务器上,或我的客户端上。 如果是我的客户,怎么能对象C正确解码。

是否有人可以帮助?

谢谢

Answer 1:

"\ud83d\ude04"是用于JSON Unicode转义序列U+D83D U+DE04 ,这是“代理对”为Unicode的U + 1F604(微笑的OPEN嘴和微笑的眼睛FACE)。

NSJSONSerialization正确解码这一点,因为可以在下面的例子中可以看出:

const char *jsonString = "{ \"emoji\": \"\\ud83d\\ude04\" }";
NSLog(@"JSON: %s", jsonString);
NSData *jsonData = [NSData dataWithBytes:jsonString length:strlen(jsonString)];
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.myLabel.text = [jsonDict objectForKey:@"emoji"];
NSLog(@"Emoji: %@", self.myLabel.text);

输出:

JSON: { "emoji": "\ud83d\ude04" }
Emoji: