从服务器接收损坏的信息

时间:2012-04-11 18:10:02

标签: nsstring nsdate corrupt nsmutableurlrequest

在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];

这将根据NSData对象分配正确的空间量,因此NSString将永远不会尝试访问或存储更多可能位于应该访问的最后一个地址后面的空间。

1 个答案:

答案 0 :(得分:3)

解答:

我解决了问题,而不是使用

NSString * sData = [NSString stringWithUTF8String:[data bytes]]; 你应该使用

NSString * sData = [[NSString alloc] initWithData:数据编码:NSUTF8String]; 这将根据NSData对象分配正确的空间量,因此NSString将永远不会尝试访问或存储更多可能位于应该访问的最后一个地址后面的空间。