AttributeError:' builtin_function_or_method'对象没有属性'编码'
我试图将文本转换为代码转换器作为作业的示例,这是基于我在研究中发现的一些代码,
import binascii
text = input('Message Input: ')
data = binascii.b2a_base64.encode(text)
text = binascii.a2b_base64.encode(data)
print (text), "<=>", repr(data)
data = binascii.b2a_uu(text)
text = binascii.a2b_uu(data)
print (text), "<=>", repr(data)
data = binascii.b2a_hqx(text)
text = binascii.a2b_hqx(data)
print (text), "<=>", repr(data)
任何人都可以帮我搞定吗?它应该接受输入然后将其转换为十六进制和其他并显示那些...... 我使用的是Python 3.6,但我也有点不习惯......
答案 0 :(得分:1)
TL; DR:
data = binascii.b2a_base64(text.encode())
text = binascii.a2b_base64(data).decode()
print (text, "<=>", repr(data))
你遇到了Python3中的一个常见问题 - str对象vs bytes对象。 bytes
对象包含字节序列。一个字节可以包含0到255之间的任何数字。通常这些数字通过ASCII表转换为英文字母等字符。通常在Python中,您应该使用字节来处理二进制数据。
另一方面,str
对象包含一系列代码点。当您拨打print
时,一个代码点通常代表屏幕上打印的一个字符。在内部它是字节序列,因此中文符号的
在内部保存为3个字节的长序列。
现在解决你的问题。该函数需要bytes
对象作为输入,但您从函数str
获得了一个input
对象。要将str
转换为bytes
,您必须在str.encode()
对象上调用str
方法。
data = binascii.b2a_base64(text.encode())
您的原始通话binascii.b2a_base64.encode(text)
表示对象encode
的调用方法binascii.b2a_base64
,参数为text
。
函数binascii.b2a_base64
返回bytes
包含使用base64算法编码的原始输入。现在要从编码数据中取回原始str
,您必须将其称为:
# Take base64 encoded data and return it decoded as bytes object
decoded_data = binascii.a2b_base64(data)
# Convert bytes object into str
text = decoded_data.decode()
它可以写成一行
decoded_data = binascii.a2b_base64(data).decode()
警告:您对{3}的调用对于Python 3无效(它只能在python控制台中使用)