一尘不染

iOS无法正确解码json格式的表情符号unicode,并且表情符号图标显示为正方形

json

我正在开发一个iPhone应用程序,该应用程序允许人们使用表情符号图标发送消息。我使用字符集utf8mb4和排序规则utf8mb4_unicode_ci将图标保存在Mysql中,所有表情符号图标均正确保存在数据库中。但是,当我将json返回给客户端(php
json_encode)时,表情符号被编码为如下形式:’\ ud83d \
ude04’,iPhone将其显示为正方形。但是,如果我以XML格式返回,则Emoji表情图标不会像这样变成unicode:“ \ ud83d \
ude04”,而只是该图标。

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

有人可以帮忙吗?

谢谢


阅读 258

收藏
2020-07-27

共1个答案

一尘不染

"\ud83d\ude04"是的JSON Unicode转义序列U+D83D U+DE04,它是Unicode U +
1F604(带有张开嘴和笑脸的笑脸)的“代理对”。

但是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: 😄

并且Emoji符号也可以正确显示(已在iPhone设备和模拟器上测试)。

2020-07-27