/ / Python: binárne dáta POSTing poskytujú UnicodeDecodeError alebo Ascii error decoding - python-2.7

Python: binárne dáta POSTing poskytujú UnicodeDecodeError alebo Ascii error decoding - python-2.7

Pri binárnych dátach POSTing pomocou urllib2 alebo urllib3 alebo httplib2 dostanem chybu UnicodeDecodeError: "utf8" codec can"t decode alebo UnicodeDecodeError: "ascii" codec can"t decode... v závislosti od toho, či je skript Python v režime UniCode alebo ASCII.

Najskôr som si myslel, že knižnica bola problémom, a tak som skúšal rôzne knižnice, ale problém nevyriešil.

Koniec stopy zásobníka:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 895, in _send_output
msg += message_body
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: "utf8" codec can"t decode byte 0xc4 in position 627: invalid continuation byte

odpovede:

0 pre odpoveď č. 1

Problém, ako je uvedené v komentároch k programu Python chyba 11898 je to, že reťazec url bol označený na nejakom mieste ako Unicode alebo Ascii reťazec.

Potom, keď knižnica httplib vytvára reťazec bajtov pre celú správu HTTP / S a riadok

msg += message_body

je spustený, Python sa pokúsi konvertovať message_body (ktorý obsahuje binárne údaje) na Ascii alebo Unicode. V oboch prípadoch konverzia zlyhá.

Riešenie použitie str() pri vykonávaní akýchkoľvek úprav adresy URL. V mojom prípade:

url = baseUrl + "/envelopes"      # throws UnicodeDecodeError
url = str(baseUrl + "/envelopes") # works great

Ak to nestačí, skontrolujte ostatné reťazce, aby ste sa uistili, že neboli označené ako Unicode alebo Ascii.