我目前正在尝试将一些包含emojis的JSON发布到python中。我尝试用包含来自我的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"有什么建议怎么解决吗?
发布于 2014-05-22 19:33:14
有两个困难:
NSString WRT UTF飞机1及以上,UTF-16的基本用途说明了这一点.例如,length将为一个表情符号返回2。示例代码(改编自@Hot ):使用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 9192 f09f 9192 f09f 92a6227d
发布于 2014-05-22 18:34:12
叹息:
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将提供所有必要的“转义”。
https://stackoverflow.com/questions/23814394
复制相似问题