2012-04-11 11 views
2

IphoneとAndroidで応答コード200が返されます。有効で良好な応答がエラーなしで得られますが、受信しているJSONには追加文字が含まれています。私は受け取ったNSDataを印刷します。長さは580で、少なくとも失敗するとNSStringの最後に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であるとは限りません。

ANSWER:

私はあなたがこれはNSDataオブジェクトに基づいてスペースの正確な量をALLOCひいてはます

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

を使用する必要があります

NSString *sData = [NSString stringWithUTF8String:[data bytes]]; 

を使用して問題を解決したの代わりに、 NSStringは、アクセスされたはずの最後のアドレスの後ろにある可能性のある領域にアクセスしようとしたり、さらにスペースを格納しようとしません。

答えて

3

ANSWER:;:

I代わり

NSStringの* SDATA = [[データ]はバイトNSStringのstringWithUTF8String]を使用して問題を解決しました 使用する必要があります

NSString * sData = [[NSString alloc] initWithData:データエンコーディング:NSUTF8String]; これは、NSDataオブジェクトに基づいて正しい量の領域を割り当てます。したがって、NSStringは、アクセスされたはずの最後のアドレスの後ろにある可能性のある領域にアクセスまたは格納しようとしません。

関連する問題