2015-10-18 49 views
1

我按如下方式發送文件。如何在python3中正確解碼圖像/ pdf文件

with open(file,'rb') as f: 
    rh=f.read() 

我們把它我使用

sock.sendto(rh, (ip,port)) 

當接收我試圖解碼此如下。

dat = sock.recvfrom() 
data=dat.decode('ascii') 

然後我寫這個文件。這在文本文件的情況下工作得很好。但如果我發送和接收圖像/ PDF文件,我得到這個錯誤..

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) 

我無法找出這裏有什麼問題。我也用過dat.decode('utf-8')但沒有用

+0

爲什麼要使用任何編碼解碼二進制文件? –

+0

雖然試圖發送文件我編碼它,並在接收端我寫這個文件,所以我猜我應該解碼它,然後再試圖寫它。 –

+0

你在哪裏編碼? –

回答

1

嘗試使用codecs打開文件。

import codecs 

f = codecs.open(filepath, encoding="ISO8859-1") 

我在使用API​​上傳PDF文件時爲我工作。

1

沒有必要解碼。您以二進制模式讀取併發送文件,因此以二進制模式寫入收到的文件。 encode/decode是用於將Unicode文本翻譯爲二進制表示和從二進制表示翻譯。

with open(output_filename,'wb') as f: 
    f.write(data) 
相關問題