zlib, gzip and HTTP compression.
Alan Kennedy
alanmk at hotmail.com
Sat Jan 12 18:08:16 EST 2002
Andrew,
Yes, that was exactly the problem. I am running on win2k and winnt4.
By adding the lines
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
The entire problem went away!
I never realised that stdout was doing character translation. So using
sys.stdout.write(compressedBuf)
thinking that this was giving me a raw binary write, and bypassing
possible "print" related character translation, was the wrong
approach.
So the character translation was happening on the file descriptor
itself? Is that standard C behaviour? Has it been that long since I
coded in C? :-) Even then, I never did any stdio coding on dos/win32.
After many hours of struggling with this, I hadn't really gotten any
further. I had discovered that some files compressed and transmitted
correctly with the code that I had, whereas other did not. I'm sure
now that if I go back, I'll find that the gzipped files that didn't
work contained 0x0A.
Whew! That's a relief!
Thanks to all who helped out with hints, tips, suggestions and
solutions.
Sincerely,
Alan.
Andrew MacIntyre <andymac at bullseye.apana.org.au> wrote in message news:<mailman.1010859382.21963.python-list at python.org>...
> On 11 Jan 2002, Alan Kennedy wrote:
>
> > There is obviously some small detail that I am missing, such as
> > character translation during the print statement(?), one extra byte
> > need somewhere, etc?
>
> ...
>
> > ------------------------------------------
> > #! C:/python21/python.exe
>
> ...
>
> From the above I'd guess that you're using Cygwin. On Windows (MSVC or
> Cygwin) or OS/2 (VACPP or EMX/gcc), stdout (which is what print uses) will
> be in text mode - ie newline characters get translated to CRLF. If your
> compressed data has a newline character (LF) in it, this will result in a
> corrupted output stream.
>
> You'll need to find a way to change stdout to binary mode ('wb'). At the
> moment I don't know of a practical way to do this with either OS/2 port,
> and have no information about the Win32 ports.
More information about the Python-list
mailing list