On 8/19/2016 1:10 PM, Larry Martell wrote:
I have some python code (part of a django app) that processes a request that contains a png file. The request is send with content_type = 'application/octet-stream'
An 'octet' is a byte of 8 bits. So the content is a stream of bytes and MUST NOT be decoded as unicode text.
In the python code I want to write this data to a file and still have it still be a valid png file. The data I get looks like this: u'\ufffdPNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\ufffd\x00\x00\x01\ufffd ......'
The data you got looked like b'...PNG...' where the *ascii* codes for "PNG' identify it as a png byte stream. It was mistakenly decoded to unicode text by something. Png bytes must be decoded, when decoded, to a png image. You want to write the bytes to a file exactly as received, without decoding.
If I try and write that to a file it fails with a UnicodeEncodeError. If I write it with encode('utf8') it writes the file, but then it's no longer a valid png file.
The data ceased representing a png image as soon as wrongfully decoded as unicode text.
-- Terry Jan Reedy -- https://mail.python.org/mailman/listinfo/python-list