我正在开发一个iPhone应用程序,该应用程序允许人们使用表情符号图标发送消息。我使用字符集utf8mb4和排序规则utf8mb4_unicode_ci将图标保存在Mysql中,所有表情符号图标均正确保存在数据库中。但是,当我将json返回给客户端(php json_encode)时,表情符号被编码为如下形式:’\ ud83d \ ude04’,iPhone将其显示为正方形。但是,如果我以XML格式返回,则Emoji表情图标不会像这样变成unicode:“ \ ud83d \ ude04”,而只是该图标。
我想知道这是服务器还是客户端上的问题。如果是我的客户,对象c怎么能正确解码它。
有人可以帮忙吗?
谢谢
"\ud83d\ude04"是的JSON Unicode转义序列U+D83D U+DE04,它是Unicode U + 1F604(带有张开嘴和笑脸的笑脸)的“代理对”。
"\ud83d\ude04"
U+D83D U+DE04
但是NSJSONSerialization可以正确解码,如以下示例所示:
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设备和模拟器上测试)。