在Iphone和android上,我得到的响应代码为200,这意味着我得到了一个有效而且没有错误的良好响应,但是我收到的json有额外的字符。我打印出我收到的NSData,它的长度是580,而NSString至少在失败时会有更大的长度,并在JSON的末尾打印n +个额外的字符。我不知道为什么会这样,但我想我会看看是否有人能看到我会做错的事情。从服务器接收损坏的信息
NSString *post = [NSString stringWithFormat:@"referer=%@&username=%@&password=%@", referer, username, password];
NSData *pData = [post dataUsingEncoding: NSUTF8StringEncoding allowLossyConversion:YES];
NSString *pLength = [NSString stringWithFormat:@"%d", [pData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setURL:self.url];
[request setHTTPMethod:@"POST"];
[request setValue:pLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:pData];
[request setTimeoutInterval:30];
NSHTTPURLResponse *response = nil;
NSError *err = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *sData = [NSString stringWithUTF8String:[data bytes]];
我没有收到我收到是200.我打印出所有这些值以及任何错误和每一个响应代码。数据长度为580,sData有时会有所不同,但是当它通过时,它的长度将是580,但是对于不同的情况,这可能会发生变化。对于使用该系统的其他用户而言,数据并不总是580。
答:
我解决,而不是使用
NSString *sData = [NSString stringWithUTF8String:[data bytes]];
的问题,您应该使用
NSString *sData = [[NSString alloc] initWithData: data encoding: NSUTF8String];
这将ALLOC基于NSData对象,因此在正确的空间量NSString永远不会尝试访问或存储更多的空间,可能在应该访问的最后一个地址之后。