サーバーとデバイス間でzipアーカイブを送信しようとしていますが、何が間違っているのかを把握しようとしています。作業を楽にするために、現在、PHPMyAdminのアップロード機能を使用してファイルをアップロードし、エンコードの問題の可能性を減らしています。また、ダウンロードとして機能するクイックスクリプトを作成することで、データベース内のファイルが正しいことを確認しました。ただし、ファイルの名前を.zipファイルに変更する必要があります(ファイル名を指定しなかったため)。それは完璧に動作します。
サーバーは次のコードを使用してzipデータを提供します。($ adはオブジェクトであり、getZippedHTML()は実際のバイナリデータを復元します)json_encodeが不明な直接バイナリデータを出力しない問題を回避するためにUTF8エンコーディングを使用します。
$response['ad']=utf8_encode($ad->getZippedHTML();
print json_encode($response);
iOS側では、次の方法でデータをデコードしようとしています。
NSString *zipString=[serverResponse valueForKey:@"ad"];
NSData *zipData=[zipString dataUsingEncoding:NSUTF8StringEncoding];
//Test retrieved data
[zipData writeToFile:zipPath atomically:YES];
ただし、ディスクに書き込まれるファイルは有効なzipアーカイブではないようです。unzipユーティリティはそれを使用できません。dataUsingEncodingを使用してデータをデコードするのではなく、データをもう一度エンコードしているという事実まで、問題を追跡しました。
UTF8でエンコードされた文字列を取得してNSDataに戻すにはどうすればよいですか?