2013-02-22 77 views
0

我想使用来自JSON文件的在线数据。它目前正在工作,但是当我使用特殊字符时,它显示“null”。下面是我使用的代码:NSJSONSerialization:正确对待特殊字符

NSString *urlString = [NSString stringWithFormat:@"http://belesios.com/burc/koc2.php"]; 
NSURL *url = [NSURL URLWithString:urlString]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
NSError *error; 
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
NSLog(@"%@", json); 
NSString *ciktiText = [[NSString alloc] initWithFormat:@"%@", json]; 
[kocLabel setText:ciktiText]; 

例如,如果我的文件包含C或U,则返回null。我需要做什么?

+0

的第一件事是打印错误。 - 服务器是否以UTF-8发送JSON数据? – 2013-02-22 18:10:14

+0

不,第一件事是用正确的英文写作,而不是滥用标签。发布错误消息会有帮助,但这只是第二件事。 – 2013-02-22 18:13:54

+2

如果字符代码使其成为NSString而没有“损坏”,那么任何适当的JSON序列化器/解析器都应该处理它。然而,数据传输中的数据不会被破坏是至关重要的。你需要给我们一个更具体的例子,说明你相信你正在接受什么,以及你认为它正在被翻译成开始调试。 – 2013-02-22 18:46:24

回答

4

试试这个方法找到了当数据从服务器提取使用何种编码:

NSStringEncoding encoding; 
NSString *jsonString =[NSString stringWithContentsOfURL:URL usedEncoding:&encoding error:&error]; 
if (error) 
    NSLog(@"Error: %@", error); 

您应该检查服务器返回的数据进行编码。你的代码是正确的,但你应该添加一些检查,如果错误!=零,那么不要执行并显示或记录它。

NSString *jsonString = @"{\"abc\":\"ç or ü\"}"; 
NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error]; 
NSLog(@"Output: %@", jsonObj); 

输出:{ABC = “\ U00e7或\ U00fc”; }如果您使用Fiddler或某些其他软件来打印原始响应,那么您的服务器响应应该与编码字符类似。

目前您的数据看起来像在那里为UTF8编码字符应该像\ U00e7你应该做= C enter image description here

+0

为什么这应该更好?您的代码将服务器响应转换为NSString,然后返回到NSData,直接使用'dataWithContentsOfURL'没有区别。 – 2013-02-22 19:45:18

+0

@MartinR默认编码是NSASCIIEncoding,但要在问题一中提到特殊字符需要UTF8,如果我没有错,没有直接的方法来加载特定编码的数据。如果我错了,请纠正我。 – SAPLogix 2013-02-22 19:53:03

+3

'dataWithContentsOfURL'加载没有任何转换的服务器响应。您的代码将服务器响应(解释为UTF-8)转换为NSString并返回到NSData。如果服务器发送UTF-8,结果没有区别。如果服务器不发送UTF-8,您的代码将不会将其转换为UTF-8。 – 2013-02-22 19:57:37