我打电话来获得这样的JSON响应:
NSData *urlData=[NSURLConnection sendSynchronousRequest:serviceRequest returningResponse:&httpResponse error:nil ];
NSString *returnString=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
但是,当我使用NSLog打印字符串时:
Emiratos �rabes Unidos
当我将它转换为NSData时:
NSData *jsonData = [returnString dataUsingEncoding:NSUTF8StringEncoding];
NSArray * response = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
它变成了(当我从数组中检索值时):
Emiratos \Ufffdrabes Unidos
当我把它放在标签上时,它显示如下:
Emiratos �rabes Unidos
我想在这样的标签中显示:
Emiratos Árabes Unidos
我该怎么做?
答案 0 :(得分:1)
问题似乎是这一行:
NSString *returnString =
[[NSString alloc] initWithData:urlData
encoding:NSUTF8StringEncoding];
您假设数据是编码为UTF8的字符串。但显然它不是。因此,您正在查看"替换字符" (代码点U + FFFD)此时。
您需要找出实际使用的编码。您可以尝试其他编码。或者,使用NSLog查看数据; NSData对象被记录为十六进制字节序列,因此通过查看该位置中的字节,并通过查找Internet上的各种编码,您可以推断出此处使用的编码。
(但是如果您使用NSLog并且此时您实际上看到了FFFD,那么您已经拥有它;服务器本身正在提供不良数据,并且您无法对其进行任何操作,因为在你能够获得它之前,好的数据就会丢失。)