Súbor posielam nasledujúcim spôsobom.
with open(file,"rb") as f:
rh=f.read()
Teraz ho pošlem, ktorý používam
sock.sendto(rh, (ip,port))
Počas prijímania sa snažím toto dekódovať nasledujúcim spôsobom.
dat = sock.recvfrom()
data=dat.decode("ascii")
Potom to zapisujem do súboru. V prípade textového súboru to funguje úplne dobre. Ak však odosielam a prijímam súbor s obrázkom / pdf, zobrazí sa táto chyba.
File "code.py", line 16, in <module>
data=dat.decode("ascii")
UnicodeDecodeError: "ascii" codec can"t decode byte 0x89 in position 41: ordinal not in range(128)
Nedokážem tu zistiť, v čom je problém. Použil som tiež dat.decode („utf-8“), ale k ničomu
odpovede:
1 pre odpoveď č. 1Skúste súbor otvoriť pomocou codecs
.
import codecs
f = codecs.open(filepath, encoding="ISO8859-1")
Pracoval som pri nahrávaní súboru PDF pomocou rozhrania API.
1 pre odpoveď č. 2
Nie je potrebné dekódovať. Čítali ste a odosielali súbor v binárnom režime, takže napíšte prijatý súbor v binárnom režime. encode
/decode
je určený na preklad textu Unicode do az binárnej reprezentácie.
with open(output_filename,"wb") as f:
f.write(data)