You can prevent deflate from generating the header by passing in - MAX_WBITS to the options for Deflate.new. The following method emulates gzdeflate from php: def gzdeflate(s) Zlib::Deflate.new(nil, -Zlib::MAX_WBITS).deflate(s, Zlib::FINISH) end puts gzdeflate("Hello World").unpack('H*').first # => f348cdc9c95708cf2fca490100 On Mar 14, 8:16 am, Pat Patterson <Andrew.Patter... / Sun.COM> wrote: > OK - so now I know what is happening... > > Zlib::Deflate.deflate implements ZLIB compression according to RFC 1950. > ZLIB defines a 2 byte header containing a variety of flags and a 4 byte > trailer containing an Adler-32 checksum. Just out of interest, the > header that I'm seeing translates as 'compression method = deflate, > windows size = 32k, no preset dictionary, default compression level', > which makes perfect sense. Deflate compression itself is defined by RFC > 1951. > > So - if you want 'raw' deflated data (which is called for in many > situations), cutting off the leading 2 and trailing 4 bytes is exactly > what you need to do. > > Cheers, > > Pat > > > > Pat Patterson wrote: > > Thanks, Brian! That revealed an obvious bug in the code I was using to > > examine the deflated data (should have been 0.upto(deflated.length-1)). > > > So Base64 /is/ working correctly. Deflate prepends 2 bytes (seems to > > be constant 0x789c for default deflate level) and appends 4 bytes > > (rather than 1 and 5 as I thought) to the deflated data. When I cut > > those off, I can get Ruby to work the same as PHP. > > > Still - it would be nice if deflate worked the same as on Java, PHP, ... > > > Cheers, > > > Pat > > > Brian Candler wrote: > >> On Tue, Mar 13, 2007 at 01:21:52PM +0900, Pat Patterson wrote: > > >>> While the Ruby > > >>> deflated = Zlib::Deflate.deflate( "Hello world" ) > >>> myhex = "" > >>> 1.upto(deflated.length) { |i| myhex << "%02x" % deflated[i] } > >>> puts myhex > > >>> Shows > > >>> 9cf348cdc9c95728cf2fca49010018ab043d00 > > >>> (BTW - if anyone knows a more succinct way to hex encode a string in > >>> Ruby, that would be useful) > > >> str = "\001\377" > >> puts str.unpack("H*") > > -- > Pat Patterson - pat.patter... / sun.com > Federation Architect, > Sun Microsystems, Inc.http://blogs.sun.com/superpat