表情符号显示为框

时间:2012-10-16 03:54:09

标签: objective-c emoji

我正在创建一个应用程序,它将内容从UITextField发布到PHP脚本,然后存储在数据库中以便稍后阅读。我有一次与表情符号合作。

使用json,我会得到这样的回复:

content = "\Uf44d";
id = 104;
time = 1350359055;

在这个例子中,我使用了表情符号。但当我[dictionary objectForKey:@"content"]时,会出现一个方框。

我想我需要转换为UTF-8。但我不完全确定。请帮忙!

2 个答案:

答案 0 :(得分:1)

我希望这会对你有帮助......我正在使用这个, e106 是我的表情符号代码。

仅使用以下行内容行进行回复:

content = [NSString stringWithFormat:@"%C", 0xe106];

答案 1 :(得分:0)

U+F44D是“私人使用区”U+E000..U+F8FF中的Unicode字符,因此可能不是您要显示的字符。

另一方面,U+1F44D是“THUMBS UP SIGN”,因此可能是您的Web服务没有为大于0xFFFF的Unicode字符创建正确的JSON响应。

根据JSON RFC,可以使用UTF-16代理对转义不属于“基本多语言平面”的字符。对于U+1F44D字符,JSON Unicode转义序列将为“\ ud83d \ udc4d”。

以下代码显示它一般有效:

const char *s = "{ \"content\": \"\\ud83d\\udc4d\", \"id\": 104, \"time\": 1350359055 }";
NSData *jsonData = [NSData dataWithBytes:s length:strlen(s)];
NSError *error;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
self.label.text = [jsonDict objectForKey:@"content"];

这会在标签中正确显示“THUMBS UP SIGN”。

但是你不必转义字符,Web服务也可以只发送UTF-8序列。