为什么会出现此错误?

时间:2018-03-12 13:14:42

标签: python-3.x system message attributeerror encoder

  

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,但我也有点不习惯......

1 个答案:

答案 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控制台中使用)