2016-12-14 46 views
0

我需要從一個二進制文件AmbientTemp.dat發佈一些數據服務器,並有python2:蟒蛇,從python2後的二進制數據python3

import urllib 
import urllib2 

fp = 'xxx/AmbientTemp.dat' 
with open(fp, 'rb') as fo: 
    ambient = fo.read(64) 
data = urllib.urlencode({ 
    'action': 'xxx', 
    'ambient': ambient, 
}) 
req = urllib2.Request('http://xxx', data=data) 
urllib2.urlopen(req) 

起初,我可以python2保存數據:

class AmbientView(xxx): 
    def post(self, *args, **kwargs): 
     ambient = self.request.POST.get('ambient', '') 
     fp = 'xxx/AmbientTemp.dat' 
     with open(fp, 'wb') as fo: 
      fo.write(ambient) 
     ... 

但它是錯誤的python3.5:

...fo.write(ambient) 
TypeError: a bytes-like object is required, not 'str' 

所以,我編碼STR數據:

fo.write(ambient.encode(encoding='utf-8')) 

AmbientTemp.dat成爲78位,我只是read(64)

+0

您是否在尋找https://docs.python.org/3/library/base64.html? – kay

+0

你使用什麼web服務器框架來定義'def post()'? –

+0

'def post()'是一個類中的方法,我使用django – lizs

回答

0

我嘗試用latin1編碼數據,並獲得正確的數據。

fo.write(ambient.encode(encoding='latin1'))