0

私は、このタイプのエンコーディングでXFDLファイルを解凍するのに役立つライブラリまたはコードをインターネットで探してきました:application / x-xfdl; content-encoding="asc-gzip"。私が扱った以前のXFDLファイルはすべて、次のタイプのエンコーディングを使用していました:application / vnd.xfdl; content-encoding = "base64-gzip"、Base64とGZIP(両方ともgithubのライブラリ)を使用しても問題はありませんでしたnicklockwoodによって書かれました)。これらのタイプのファイルを解凍するPythonのコードを見つけました:http ://www.ourada.org/blog/archives/375 、しかし私はこのコードをどのように実装するかについて途方に暮れていますObjective-Cプロジェクト。

どんな助けでも、あるいは正しい方向に少しでも進んでいただければ幸いです。

ありがとうございました!

4

1 に答える 1

2

asc-gzip私が見つけた例は、実際にはzlibであり、base-64でエンコードされています。これはブロックに分割され、各ブロックの前に圧縮および非圧縮の長さがビッグエンディアンの順序で続き、それぞれ2バイトになります。

したがって、デコードするには:

  1. Base-64はすべてをデコードします。次に、デコードされたバイトについて:
  2. 最初の2バイトから次の圧縮長をビッグエンディアン順に計算します。それをcと呼びます。
  3. 次の2バイトから次の非圧縮長をビッグエンディアン順に計算します。それをuと呼びます。
  4. zlibを使用して、次のcバイトで構成されるzlibストリームをデコードします。zlibが正確にcバイトをデコードし、結果の非圧縮データが正確にu バイトの長さであることを確認します。
  5. データが消費されるまで、手順2から繰り返します。(すべて正確に消費する必要があります。)

興味深いことに、「asc」と「gzip」はどちらもエンコーディング名の誤称です。 asc実際にはbase64を意味し、gzip実際にはzlibを意味します。図に行きます。

于 2013-03-09T03:56:39.887 に答える