If you should ever find yourself in the position of having to figure out how to compress XFDL files with the asc-gzip encoding, and I don’t wish it on you, here’s Python code to do it. Obviously, you’ll need some imports and error handling and optimization.
This thread gave me pointers to figure this out; Bryan was just a little off because he was using a gzip library rather than a zlib one.
# compress according to wacky XFDL compression scheme def compress(fc): CHUNK_SIZE = 60000 out = '' for i in range(0, len(fc), CHUNK_SIZE): chunk = fc[i:i + CHUNK_SIZE] chunklen = len(chunk) compressedchunk = zlib.compress(chunk) compressedchunklen = len(compressedchunk) out += chr(compressedchunklen / 256) out += chr(compressedchunklen % 256) out += chr(chunklen / 256) out += chr(chunklen % 256) out += compressedchunk f = StringIO.StringIO() f.write('application/x-xfdl;content-encoding="asc-gzip"n') b64 = base64.standard_b64encode(out) for i in range(0, len(b64), 76): f.write(b64[i:i+76]) f.write('rn') ret = f.getvalue() f.close() return ret