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

これにより、NSData オブジェクトに基づいて適切な量のスペースが割り当てられるため、NSString は、アクセスされるべき最後のアドレスの背後にある可能性のあるスペースにアクセスしたり、より多くのスペースを格納しようとしたりすることはありません。

4

1 に答える 1

3

答え:

使用する代わりに問題を解決しました

NSString *sData = [NSString stringWithUTF8String:[データ バイト]]; 使用する必要があります

NSString *sData = [[NSString alloc] initWithData: データエンコーディング: NSUTF8String]; これにより、NSData オブジェクトに基づいて適切な量のスペースが割り当てられるため、NSString は、アクセスされるべき最後のアドレスの背後にある可能性のあるスペースにアクセスしたり、より多くのスペースを格納しようとしたりすることはありません。

于 2012-04-13T13:24:28.227 に答える