1

我无法弄清楚如何让表情符号图标显示在我正在开发的 iPhone 应用程序中。问题是,当有人从应用程序向数据库发布内容时,它会在应用程序中显示为正方形。应用程序从表情符号应该所在的服务器获取的内容类似于 \uf604

有谁知道我做错了什么?我一直在寻找一个好的答案,但到目前为止我还没有找到任何完全相关的东西。

//more info
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
        self.memoArray = [returnString JSONValue]; 

//when adding it to the label
cell.memoLabel.text = [itemData objectForKey: @"memo"];

我发现例如'\Uf604'需要是'\U0001F604'。

4

3 回答 3

4

这是 Json 解析器 SBJSON 中的一个错误。我一直在使用 SBJson 类,在几个项目中,使用多个版本,并发现一些 Emoji 字符使用的复杂 unicode 存在一些问题。那个图标用一个很长的 unicode 表示,我不记得确切的格式,但它就像一个双 unicode。在 SBJson 中,我发现了一些解析大型 unicode 的错误。

我确实修改了一个方法,它现在可以工作了,但是当我去 Stig 的 SBJson 存储库告知这一点时,我发现了一个关于 unicodes 的未解决问题:https ://github.com/stig/json-framework/issues/115

然而,我的解决方案非常不同。在我使用的版本中,我只需要在方法 scanUnicodeChar: all this if with its body 中进行注释:

/*
if (hi >= 0xd800) {     // high surrogate char?
    ... if-body ... ... 
}
*/

如果您的版本包含该方法和“如果”,请尝试将其删除。

对于其他版本,也许解决方案同样简单。找到一个名为 getStringToken: 的方法,在其中,在 switch-case '\' 语句中,尝试这样注释:

/*
if (SBStringIsSurrogateHighCharacter(hi)) {
  ..... body ....
} else if ....... {
    .... ....
} else {
*/

CFStringAppendCharacters((CFMutableStringRef)acc, &hi, 1);

/*
}
*/

我还没有测试过最后一个,肯定需要做更多的事情才能使一切正常运行。

于 2012-07-06T06:43:58.837 回答
0

请按照以下步骤操作:

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

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

于 2013-05-14T12:47:31.810 回答
0

更新到最新的 SBJson,此问题已修复。

https://github.com/stig/json-framework/tags

于 2013-12-04T19:22:55.103 回答