许多pythonchallenge在python3x中根本不起作用

许多pythonchallenge在python3x中根本不起作用,python,string,byte,portability,bz2,Python,String,Byte,Portability,Bz2,我是一个新手,在帮手的帮助下,我在尝试pythonchallenge! 我在挑战8和一个简单的命令中,例如: import bz2 bz2.decompress('BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084') 我一直收到消息TypeError:“str”不支持缓冲区接口 有什么帮助吗 我尝试了不同的页面来表示从Pyt

我是一个新手,在帮手的帮助下,我在尝试pythonchallenge! 我在挑战8和一个简单的命令中,例如:

import bz2
bz2.decompress('BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084')
我一直收到消息TypeError:“str”不支持缓冲区接口

有什么帮助吗

我尝试了不同的页面来表示从Python 2X到3X的可移植性,他们说:“默认情况下字符串是Unicode的”

这是什么意思?事实上我不需要通知你

 bytes('my stuff', 'utf-8')
对吧?


谢谢,如果听起来很蠢的话,对不起

在Python3中,可以将字节看作类似于python2的str,str是python2的unicode。在Python3中,默认的文本是str,如果要指定字节文本,可以在文本之前添加一个b。这就是python在第一种情况下的要求:

TypeError:需要类似字节的对象,而不是“str”

因此,这将是:

import bz2
bz2.decompress(b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084')

将“á”str转换为utf8编码的字节,然后再次转换为str。

在Python3中,可以将字节视为类似于python2的str,str是python2的unicode。在Python3中,默认的文本是str,如果要指定字节文本,可以在文本之前添加一个b。这就是python在第一种情况下的要求:

TypeError:需要类似字节的对象,而不是“str”

因此,这将是:

import bz2
bz2.decompress(b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084')

将“á”str转换为utf8编码的字节,然后再次转换为str。

关于您发布的代码存在的问题,必须修改第一个代码片段以使用Python 3,如下所示:

导入bz2

解压(b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\x0\x02\x00\x00!\x9ah3M\x07关于您发布的代码的问题,必须修改第一个代码片段以使用Python 3,如下所示:

导入bz2

解压(b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\x0\x02\x00\x00!\x9ah3M\x07谢谢。b'解决了问题,但答案仍然是前面的b'hug。不过,我不确定我是否理解。字节类似于Python 3中的str,字符串现在默认为Unicode。因此,如果变量看起来像字节,我添加了b'…st呢r不支持缓冲区接口“”。这意味着我必须进行“”。编码?无论如何,谢谢。为什么添加b:因为此函数(bz2.decompress)必须接收类似于对象的字节。因此,这与变量无关。另一种情况,如我所说,没有更多代码(查看每个变量的类型),我不能说,但如果情况类似(您正在传递一个str,其中应传递一个字节)你可以使用encode转换它,是的。啊。好的。因此,根据函数的不同,参数可能只有字节。好的。谢谢。我会读谢谢。b'解决了问题,但答案仍然是前面的b'hug。不过,我不确定我是否理解。字节类似于Python 3中的str,字符串现在默认为Unicode。因此如果变量看起来像字节,我添加了b'.“str不支持缓冲区接口”怎么办?这意味着我必须进行“”编码?无论如何,谢谢。为什么添加b:因为这个函数(bz2.decompress)必须接收一个类似字节的对象。所以,这与变量无关。另一种情况,如我所说,没有更多代码(查看每个变量的类型)我不能说,但是如果情况类似(你传递的是一个str,你应该传递一个字节),你可以使用encode转换它,是的。啊。好的。所以根据函数的不同,参数可能只有字节。好的。谢谢,我会读的
'á'.encode("utf8").decode("utf8")