Objective c 在iOS应用程序中显示表情符号的问题

Objective c 在iOS应用程序中显示表情符号的问题,objective-c,ios,xcode,emoji,Objective C,Ios,Xcode,Emoji,我很难弄清楚如何让表情符号显示在我正在开发的iPhone应用程序中。问题是,当有人从应用程序向db发布某个内容时,它会在应用程序中显示为正方形。应用程序从emojicon应该位于的服务器上获得的信息如下\uf604 有人知道我做错了什么吗?我一直在寻找一个好的答案,但到目前为止,我还没有找到任何确切相关的 //more info [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"C

我很难弄清楚如何让表情符号显示在我正在开发的iPhone应用程序中。问题是,当有人从应用程序向db发布某个内容时,它会在应用程序中显示为正方形。应用程序从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'

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

我确实修改了一个方法,现在它可以工作了,但当我去Stig的SBJson存储库了解这一点时,我发现了一个关于unicodes的公开问题:

然而,我的解决方案却大不相同。在我使用的版本中,我只需在scanuclodechar方法中进行注释:所有这一切都与它的主体有关:

/*
if (hi >= 0xd800) {     // high surrogate char?
    ... if-body ... ... 
}
*/
如果您的版本包含该方法和“如果”,请尝试删除它

对于其他版本,解决方案可能也同样简单。找到一个名为getStringToken:的方法,并在其内部的switch case“\”语句中,尝试以以下方式进行注释:

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

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

/*
}
*/

我还没有测试最后一个,为了让一切正常工作,肯定还需要做更多的工作。

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

我确实修改了一个方法,现在它可以工作了,但当我去Stig的SBJson存储库了解这一点时,我发现了一个关于unicodes的公开问题:

然而,我的解决方案却大不相同。在我使用的版本中,我只需在scanuclodechar方法中进行注释:所有这一切都与它的主体有关:

/*
if (hi >= 0xd800) {     // high surrogate char?
    ... if-body ... ... 
}
*/
如果您的版本包含该方法和“如果”,请尝试删除它

对于其他版本,解决方案可能也同样简单。找到一个名为getStringToken:的方法,并在其内部的switch case“\”语句中,尝试以以下方式进行注释:

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

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

/*
}
*/

我还没有测试最后一个,为了让一切正常工作,肯定还需要做更多的工作。

请按照以下步骤操作:

将表情符号转换为base64并发送到服务器。 在服务器端,在数据库中保存base64而不进行解码。 当您想要在应用程序上显示表情符号时,请从服务器检索相同的base64数据。 解码检索字符串并显示在应用程序上。 您的表情符号将正确显示。
注意:当您要在网页上显示数据时,请在网页上显示数据时解码数据。

请按照以下步骤操作:

将表情符号转换为base64并发送到服务器。 在服务器端,在数据库中保存base64而不进行解码。 当您想要在应用程序上显示表情符号时,请从服务器检索相同的base64数据。 解码检索字符串并显示在应用程序上。 您的表情符号将正确显示。
注意:当您希望在网页上显示数据时,请在网页上显示数据时解码数据。

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


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


服务器是否发送Json格式的响应?如果是这样,你用什么来解析呢?它是json。我发布了更多关于如何解析json的信息。服务器是否发送json格式的响应?如果是这样,你用什么来解析呢?它是json。我发布了更多关于如何解析json的信息。