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ď č. 1Problé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.