2016-12-14 29 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'))