为什么会出现此错误?

Why is this error appearing?

AttributeError: 'builtin_function_or_method' object has no attribute 'encode'

我正在尝试制作一个文本到代码转换器作为作业的示例,这是一些基于我在研究中发现的代码,

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,但我也有点缺乏实践...

长话短说:

data = binascii.b2a_base64(text.encode())
text = binascii.a2b_base64(data).decode()
print (text, "<=>", repr(data))

您遇到了 Python3 中的一个常见问题 - str 对象与 bytes 对象。 bytes 对象包含字节序列。一个字节可以包含 0 到 255 之间的任意数字。通常这些数字通过 ASCII table 转换为字符,如英文字母。通常在 Python 中你应该使用字节来处理二进制数据。

另一方面,str 对象包含代码点序列。当您调用 print 时,一个代码点通常代表屏幕上打印的一个字符。在内部它是字节序列所以中文符号 在内部保存为 3 字节长的序列。

现在解决你的问题。该函数需要输入 bytes 对象,但您从函数 input 中得到了一个 str 对象。要将 str 转换为 bytes,您必须在 str 对象上调用 str.encode() 方法。

data = binascii.b2a_base64(text.encode())

你原来的调用binascii.b2a_base64.encode(text)表示调用对象binascii.b2a_base64的方法encode,参数为text

函数 binascii.b2a_base64 returns 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()

警告:您对 print 的调用对 Python 3 无效(它仅在 python 控制台中有效)