首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSJSONSerialization和Emoji

NSJSONSerialization和Emoji
EN

Stack Overflow用户
提问于 2014-05-22 18:17:41
回答 2查看 1.9K关注 0票数 3

我目前正在尝试将一些包含emojis的JSON发布到python中。我尝试用包含来自我的NSJSONSerialization的表情符号的字符串直接输入UITextField,但是序列化程序崩溃了,没有得到有意义的解释。之后,我尝试进行一些格式转换,最后得到了这样的结果:

代码语言:javascript
复制
NSString *uniText = mytextField.text;
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding] ;

这基本上是起作用的,除非得到的UTF-8是双重的--“转义”,结果如下:

代码语言:javascript
复制
"title":"\\ud83d\\udc8f\\ud83d\\udc8f\\ud83d\\udc8f\\ud83d"

有什么建议怎么解决吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-22 19:33:14

有两个困难:

  1. 苹果公司推出的NSString WRT UTF飞机1及以上,UTF-16的基本用途说明了这一点.例如,length将为一个表情符号返回2。
  2. 无论是谁决定在平面1中放置表情符号都是很困难的,这是第一次使用平面1,很多遗留的UTF代码没有正确地处理这个问题。

示例代码(改编自@Hot ):使用OP表情符号更新

代码语言:javascript
复制
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 9192 f09f 9192 f09f 92a6227d

票数 4
EN

Stack Overflow用户

发布于 2014-05-22 18:34:12

叹息:

代码语言:javascript
复制
NSString* uniText = mytextField.text;
NSDictionary* jsonDict = @{@"title":uniText};
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);
}

如果myTextField.text是一个有效的NSString,那么不应该需要其他的转换。NSJSONSerialization将提供所有必要的“转义”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23814394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档