5

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

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

有人可以帮忙吗?

谢谢

4

3 回答 3

11

"\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: 

并且表情符号也正确显示(用 iPhone 设备和模拟器测试)。

于 2013-01-23T21:17:00.203 回答
8

请按照以下步骤操作:

  • 将 Emoji 字符转换为 base64 并使用 Json 发送到服务器。
  • 在服务器端将 base64 保存在数据库中,无需解码。
  • 当您想在应用程序上显示表情符号时,请从服务器检索相同的 base64 数据。
  • 解码检索字符串并在应用程序上显示。
  • 您的表情符号字符将正确显示。

注意:当您想在网页上显示时,当您在网页上显示数据时解码数据。

于 2013-05-14T12:52:42.673 回答
0

我们的团队通过将 utf 数据传输到服务器,将它们保存在 mysql utf8mb4 代码页并使用 base64 接收来解决此问题。服务器按需将保存的数据转换为base64。

于 2017-05-04T10:05:48.680 回答