NSJSON系列化与表情符号 [英] NSJSONSerialization and Emoji

查看:107
本文介绍了NSJSON系列化与表情符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试将一些包含emoji的JSON发布到python API。我尝试直接向NSJSONSerialization提供包含UITextField中的表情符号的字符串,但是序列化程序崩溃了,没有任何有意义的解释。 之后,我尝试执行一些格式转换,结果如下所示:

NSString *uniText = mytextField.text;
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding] ;

这基本上可以工作,只是生成的UTF-8有点双重"转义",结果如下:

"title":"\ud83d\udc8f\ud83d\udc8f\ud83d\udc8f\ud83d"

有什么建议可以解决这个问题吗?

推荐答案

有两个难点:
1.苹果软管NSStringWRT UTF飞机1及以上,底层使用 通过UTF-16显示。例如,length将返回2 一个表情符号。
2.决定在1号飞机上添加表情符号的人是 因为很难,这是第一次使用飞机1和很多 旧版UTF代码无法正确处理此问题。

示例代码(改编自@HotLicks): 使用操作表情符号更新

NSString *uniText = @"💦💏👒👒💦";
NSDictionary* jsonDict = @{@"title":uniText};

NSData * utf32Data = [uniText dataUsingEncoding:NSUTF32LittleEndianStringEncoding];
NSLog(@"utf32Data: %@", utf32Data);

NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:0 error:&error];
if (jsonData == nil) {
    NSLog(@"JSON serialization error: %@", error);
}
else {
    NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"The JSON result is %@", jsonString);
    NSLog(@"jsonData: %@", jsonData);
}

NSLog输出

utf32Data:a6f40100 8ff40100 52f40100 52f40100 a6f40100
json结果为{"Title":"💦💏👒👒💦"}
jsonData:7b227469 746c6522 3a22f09f 92a6f09f 928ff09f 9192f09f 9192f09f 92a6227d

这篇关于NSJSON系列化与表情符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆