NSJSONSerialization和表情符号

我目前正在尝试将一些包含emojis的JSON发布到python API。 我试图直接从包含我的UITextField表情符号的string喂NSJSONSerialization ,但串行器崩溃没有任何意义的解释。 之后,我试图做一些格式转换,并结束了这样的事情:

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" 

任何build议如何解决这个问题?

有两个困难:
1.苹果公司推出的NSString WRT UTF Planes 1及以上版本,UTF-16的底层使用performance贯穿。 一个例子是,一个表情符号的length将返回2。
2.决定在平面1中放置表情符号的人是很困难的,这是平面1的第一次使用,很多遗留的UTF代码不能正确处理。

示例代码(由@Hot Licks调整):使用OP表情符更新

 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

叹:

 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将提供所有必要的“转义”。