嗨我有问题因为我想要二进制的xml文件。 问题是base64编码我不知道如何编码图像和添加到字符串。 我想在解析之后解码图像。
stringResult = ResultXMLTag.ROOT_BEGIN + '\n'
f = open('id_'+str(1)+'.png','rb+')
stringResult += ResultXMLTag.RESULT_BEGIN+' '+'ID=\'1\'>\n'
stringResult += ResultXMLTag.CDATA_BEGIN+'\n'
stringResult += base64.b64encode(f.read())
stringResult2 = '\n'+ ResultXMLTag.CDATA_END+'\n'
stringResult2 += ResultXMLTag.RESULT_END+'\n'
stringResult2 += ResultXMLTag.ROOT_END
return stringResult + stringResult2
data = ET.fromstring(self.downloadData(connection))
for result in data.findall('./RESULT'):
_id = result.get('ID')
out = open('id_'+_id+'.png','wb+')
out.write(base64.decode(result.findtext('').encode()))
EDIT错误符合base64“TypeError:无法将'bytes'对象隐式转换为str”
编辑示例
>>> x = b'cat' + (base64.b64encode(b'dog'))
>>> x
b'catZG9n'
第二版
>>> x = 'cat' + str(base64.b64encode(b'dog'))
>>> x
"catb'ZG9n'"
我应该使用Witch版本发送图片?我认为我的所有问题都是因为你如何追加字符串和字节。说编码图像然后解码很简单,但这不符合我的情况。
答案 0 :(得分:1)
在Python 3中,b64encode
返回一个字节字符串。您需要将其转换为Unicode字符串。输出保证是ASCII字节,因此转换很简单。
stringResult += base64.b64encode(f.read()).decode('ascii')
答案 1 :(得分:0)
更新: 问题也可能出在downloadData()上。你在使用urlopen()吗?从downloadData()收到后,您确定要显式转换为字符串吗?
问题可能在于您如何创建XML。在线:
stringResult += ResultXMLTag.RESULT_BEGIN+' '+'ID=\'1\'>\n'
属性“ID”周围的引号在哪里?
你可以在没有IMAGE数据的情况下解析这个XML吗?将base 64编码的字符串与非编码字符串连接不应导致任何问题,它们都是字符串。