0

我正在尝试使用 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是 url,而jsonContentToSend是我用特殊字符发送到服务器的字符串。

4

2 回答 2

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];
于 2013-05-11T12:51:30.047 回答
0

处理这种情况的一种好方法是将值作为 base64 编码值发送,并在将其从 JSON 解析为像 String 这样的数据结构后,可以解码 Base64 字符串并可以取回您的特殊字符,而不会因实际 JSON 而失效

祝你好运

于 2013-05-11T11:52:44.017 回答