2012-04-11 61 views
2

在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永远不会尝试访问或存储更多的空间,可能在应该访问的最后一个地址之后。

回答

3

解答:

我解决,而不是使用

问题的NSString * SDATA = [NSString的stringWithUTF8String:[数据字节]]; 您应该使用

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