On 27-Aug-2010, at 2:58 AM, Navkirat Singh wrote: > > On 27-Aug-2010, at 2:48 AM, MRAB wrote: > >> On 26/08/2010 21:47, Navkirat Singh wrote: >>> >>> On 27-Aug-2010, at 1:57 AM, MRAB wrote: >>> >>>> On 26/08/2010 21:14, Navkirat Singh wrote: >>>>> >>>>> On 27-Aug-2010, at 1:32 AM, Dave Angel wrote: >>>>> >>>>>> Navkirat Singh wrote: >>>>>>> Hey guys, >>>>>>> >>>>>>> I am programming a webserver, I receive a jpeg file with the POST >>>>>>> method.The file (.jpeg) is encoded in bytes, I parse the bytes by >>>>>>> decoding them to a string. I wanted to know how i could write the >>>>>>> file (now a string) as a jpeg image on disk. When I try to encode the >>>>>>> same string to a bytes and write them in binary format to disk, the >>>>>>> file is not recognized as jpeg. I would be grateful if someone could >>>>>>> help me with this. >>>>>>> >>>>>>> >>>>>>> Regards, >>>>>>> Nav >>>>>> If by "decoding them to a string" you mean converting to Unicode, then >>>>>> you've already trashed the data. That's only valid if the bytes had >>>>>> been encoded from valid Unicode characters, and then only if you use >>>>>> the corresponding decoding technique. >>>>>> >>>>>> If you mean some other decoding, then the question is meaningless >>>>>> without telling us just what the decoding is, preferably with some code. >>>>>> >>>>>> It also might be useful to know what version of Python you're using, >>>>>> when you post the code. >>>>>> >>>>>> DaveA >>>>>> >>>>> >>>>> Dave, >>>>> >>>>> I am using Python3 and I receive a byte stream with a jpeg attached sent >>>>> by the web browser over a socket, which looks like this: >>>>> >>>>> b': image/jpeg\r\nAccept: text/*\r\nReferer: >>>>> http://127.0.0.1:8001/\r\nAccept-Language: en-us\r\nAccept-Encoding: >>>>> gzip, deflate\r\nContent-Length: 91783\r\nConnection: >>>>> keep-alive\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f >>>>> >>>>> From the above, I need to: >>>>> >>>>> a) Split the header content from the image content, which comes after >>>>> the keep-alive\r\n\r\n part >>>>> >>>>> b) Then write the image content to file for further use as a jpeg. >>>>> >>>> Try: >>>> >>>> image = header.split(b'keep-alive\r\n\r\n', 1)[-1] >>>> open(image_path, 'wb').write(image) >>>> -- >>>> http://mail.python.org/mailman/listinfo/python-list >>> >>> I think I forgot to mention that the original is a stream of bytes decoded >>> using ISO-8859-1 as utf-8 trhrew errors (lack of knowlegdge again). >>> >>> @MRAB - the split() method in python 3 works only on strings and throws an >>> error if I try to use bytes >>> >> All i can say is that it works for me: >> >>>>> header = b': image/jpeg\r\nAccept: text/*\r\nReferer: >>>>> http://127.0.0.1:8001/\r\nAccept-Language: en-us\r\nAccept-Encoding: >>>>> gzip, deflate\r\nContent-Length: 91783\r\nConnection: >>>>> keep-alive\r\n\r\n\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f' >>>>> image = header.split(b'keep-alive\r\n\r\n', 1)[-1] >>>>> image >> b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x84\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x07\x07\x06\x08\x0c\n\x0c\x0c\x0b\n\x0b\x0b\r\x0e\x12\x10\r\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15\x15\x0c\x0f' >> >> What error did you get? >> -- >> http://mail.python.org/mailman/listinfo/python-list > > Hi MRAB, > > Here is the error: > >>>> b = b'asdf' >>>> type(b) > <class 'bytes'> >>>> s = b.split(':') > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: Type str doesn't support the buffer API >>>> > > I got your point
The argument for the split I have give is a string, hence the error. -- http://mail.python.org/mailman/listinfo/python-list