Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新Python 2.x时Unicode字符串行为疑难解答->;3.x_Python_Python 3.x - Fatal编程技术网

更新Python 2.x时Unicode字符串行为疑难解答->;3.x

更新Python 2.x时Unicode字符串行为疑难解答->;3.x,python,python-3.x,Python,Python 3.x,我在项目中使用了Python2.7,因为我看到Python3.5即将推出,所以我决定升级我的Python解释器 我正在使用base64编码。由于新Python版本中的字符串对象在某种程度上有所不同,因此出现以下错误: TypeError:'str'不支持缓冲区接口 我已经发现在将字符串传递给此函数之前必须对其进行编码('string'.encode()),但是没有办法将字符串自动编码为unicode或其他格式吗 在Python3中,str的意思是“unicode文本”——无论您将其表示为'mys

我在项目中使用了Python2.7,因为我看到Python3.5即将推出,所以我决定升级我的Python解释器

我正在使用
base64
编码。由于新Python版本中的字符串对象在某种程度上有所不同,因此出现以下错误:

TypeError:'str'不支持缓冲区接口


我已经发现在将字符串传递给此函数之前必须对其进行编码(
'string'.encode()
),但是没有办法将字符串自动编码为unicode或其他格式吗

在Python3中,
str
的意思是“unicode文本”——无论您将其表示为
'mystring'
还是
u'mystring'
,都没有区别(后者只是为了方便与Python2的移植/共存而被允许的)

要指示字节的二进制字符串,可以使用
b'mystring'

正如它所说

此模块提供对二进制数据进行编码的功能

(我的重点)——与文本(即unicode)数据无关。作为逻辑结果,模块中的所有函数都期望或返回字节字符串

不确定为什么不能在程序中直接使用字节字符串(与文本字符串相反),但如果这是一个问题,最简单的方法是将
base64
模块中所需的函数包装到您自己的函数中,该函数提供任何编码(文本->字节)或解码(字节->文本)你需要。例如:

import base64

def b64encode(text, codec='utf8'):
    return base64.b64encode(text.encode(codec))

然后在剩下的代码中使用这个
b64encode
,而不是直接使用
base64.b64encode
,等等,等等作为解码部分。

。通过使用ftfy软件包,您可以使生活更轻松(如果需要):

…或者您可以查看chardet库:-

从chardet.universaldetector导入universaldetector


如果您不确定,这将“猜测”文件的编码。

感谢您清除此错误,那么我为什么会出现此错误?我该如何修复它sistematically@MalikBrahimi还有避免这样做的方法吗?在我的程序中,Constantli实际上可以使用字节字符串,这样做不是很好,我只是说,每次我必须调用函数时,对字符串进行编码是非常烦人的D@JuanRocamonde,如果您使用字节字符串,那么当然不需要对它们进行编码。只有当您使用文本字符串,但希望将其与只处理二进制数据的功能一起使用时,才需要编码,就像
base64
所做的那样,并且清楚地显示文档。