在iOS中解析Json时的特殊字符。

时间:2013-05-11 10:47:31

标签: iphone json utf-8

我正在尝试使用Json Parsing将字符串发送到服务器。我的字符串包含许多特殊字符,如ó,æ,ø,å等等。当我将数据发送到服务器而没有任何特殊字符时,它工作正常,响应是预期的。但是,如果甚至只有一个特殊字符,那么它在解析数据时会显示错误。 我使用以下代码来解析Json字符串: -

 NSURL *theURL = [NSURL URLWithString:urlToSendRequest];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL      cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f];
NSData *requestData = [NSData dataWithBytes:[jsonContentToSend UTF8String] length:[jsonContentToSend length]];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
[theRequest setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody: requestData];
NSURLResponse *theResponse = NULL;
NSError *theError = NULL;
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];
NSString *data=[[NSString alloc]initWithData:theResponseData encoding:NSUTF8StringEncoding];
NSLog(@"url to send request= %@",urlToSendRequest);
NSLog(@"jsoncontenttosend= %@",requestData);
NSLog(@"response1111:-%@",data);
return data;

此处 urlToSendRequest 是网址, jsonContentToSend 是我发送给具有特殊字符的服务器的字符串。

2 个答案:

答案 0 :(得分:2)

中创建POST数据时出错
NSData *requestData = [NSData dataWithBytes:[jsonContentToSend UTF8String] length:[jsonContentToSend length]];

[jsonContentToSend length]是Unicode字符的数量,而不是字节数 UTF-8字符串。如果jsonContentToSend包含非ASCII字符,则requestData将太短,仅包含JSON请求的截断部分。

您应该用

替换此行
NSData *requestData = [jsonContentToSend dataUsingEncoding:NSUTF8StringEncoding];

答案 1 :(得分:0)

处理这种情况的一种好方法是将值作为base64编码值发送,并在将其从JSON解析为数据结构(如String)后,可以解码Base64字符串并可以取回特殊字符而不会使实际JSON失效< / p> 祝你好运