2012-04-11 6 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]]; 

을 사용하는 문제를 해결

당신이 따라서하여있는 NSData 객체에 기초하여 공간의 정확한 금액 ALLOC합니다

NSString *sData = [[NSString alloc] initWithData: data encoding: NSUTF8String]; 

를 사용한다 NSString은 액세스 된 마지막 주소 뒤에있을 수있는 더 많은 공간을 액세스하거나 저장하려고 시도하지 않습니다.

답변

3

ANSWER : I 대신

사용의 문제를 해결

sData로는 NSString * = [있는 NSString stringWithUTF8String은 [데이터] 바이트]; 사용해야합니다

NSString * sData = [[NSString alloc] initWithData : 데이터 인코딩 : NSUTF8String]; 이것은 NSData 객체를 기반으로 올바른 공간을 할당하므로 NSString은 액세스 된 마지막 주소 뒤에있을 수있는 더 많은 공간을 액세스하거나 저장하려고 시도하지 않습니다.