拉丁字符显示? Objective-C的

时间:2014-03-15 18:58:49

标签: iphone objective-c ios7 utf

我打电话来获得这样的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 

我该怎么做?

1 个答案:

答案 0 :(得分:1)

问题似乎是这一行:

NSString *returnString = 
    [[NSString alloc] initWithData:urlData 
                          encoding:NSUTF8StringEncoding];

您假设数据是编码为UTF8的字符串。但显然它不是。因此,您正在查看"替换字符" (代码点U + FFFD)此时。

您需要找出实际使用的编码。您可以尝试其他编码。或者,使用NSLog查看数据; NSData对象被记录为十六进制字节序列,因此通过查看该位置中的字节,并通过查找Internet上的各种编码,您可以推断出此处使用的编码。

(但是如果您使用NSLog并且此时您实际上看到了FFFD,那么您已经拥有它;服务器本身正在提供不良数据,并且您无法对其进行任何操作,因为在你能够获得它之前,好的数据就会丢失。)