我在项目中使用的是Python 2.7,由于已经看到Python 3.5即将发布,因此决定升级Python解释器。
我正在使用base64
编码。由于字符串对象在新的Python版本中有所不同,因此出现以下错误:
TypeError: 'str' does not support the buffer interface
我已经发现在将字符串传递给此函数('string'.encode()
)之前必须对其进行编码,但是没有办法自动将字符串编码为unicode吗?
在Python 3中,str
意思是“ unicode文本”-无论您将其表示为'mystring'
还是u'mystring'
不带任何区别(为了允许与Python 2的移植/共存而允许后者)。
要指示字节的二进制字符串,可以使用b'mystring'
。
如https://docs.python.org/3/library/base64.html所述,
该模块提供用于编码二进制数据的功能
(我的重点)-与文本(即unicode)数据无关。逻辑上的结果是,模块中的所有函数都期望或返回字节字符串。
不确定为什么不能在程序中直接使用字节字符串(而不是文本字符串),但是如果有问题,最简单的方法是将base64
模块中所需的函数包装到提供任何编码(文本- >字节)或所需的解码(字节->文本)。例如:
import base64
def b64encode(text, codec='utf8'):
return base64.b64encode(text.encode(codec))
然后b64encode
在整个代码其余部分中使用它,而不是base64.b64encode
直接在解码部分中使用-等等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句