在iOS应用中显示表情符号图标的问题

时间:2012-07-05 19:57:08

标签: objective-c ios xcode emoji

我无法弄清楚如何在我正在处理的iPhone应用中显示表情符号图标。问题是当有人从应用程序向数据库发布内容时,它会在应用程序中显示为正方形。应用程序从emojicon所在的服务器获取的内容是这样的\ 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'。

3 个答案:

答案 0 :(得分:4)

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

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

尽管如此,我的解决方案却截然不同。在我使用的版本中,我只需要在方法scanUnicodeChar中发表评论:所有这些如果有它的正文:

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

如果您的版本包含该方法且“if”,请尝试删除它。

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

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

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

/*
}
*/

我还没有对最后一个进行过测试,为了让一切运行良好,我必须做更多的工作。

答案 1 :(得分:0)

请按照以下步骤操作:

  • 将表情符号转换为base64并发送到服务器。
  • 在服务器端将base64保存在数据库中而不进行解码。
  • 如果要在应用程序上显示表情符号,则从服务器检索相同的base64数据。
  • 解码检索字符串并在应用上显示。
  • 您的表情符号字符将正确显示。

注意:如果要在webPage上显示,则在WebPage上显示数据时解码数据。

答案 2 :(得分:0)

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

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