从Python3中的base64编码字符串中删除新行“\n”?

2024-10-04 03:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在Python3中建立一个HTTPS连接,当我试图对用户名和密码进行编码时,base64encodebytes方法返回编码后的值,在“\n”结尾处有一个新行字符,因此,当我尝试连接时,会收到一个错误。

有没有办法告诉base64库在编码时不要附加新行字符,或者什么是删除新行字符的最佳方法?我尝试使用replace方法,但得到以下错误:

Traceback (most recent call last):
  File "data_consumer.py", line 33, in <module>
    auth_base64 = auth_base64.replace('\n', '')
TypeError: expected bytes, bytearray or buffer compatible object

我的代码:

auth = b'username@domain.com:passWORD'
auth_base64 = base64.encodebytes(auth)
auth_base64 = auth_base64.replace('\n', '')

有什么想法吗?谢谢


Tags: 方法httpsauth密码编码错误字符replace
3条回答

我同意Mandar's observation的观点,即base64.xxxx_encode()将生成不带换行\n的输出。

对于那些想要一个比观察更自信的理解的人,我可以在这个话题上找到官方的承诺。Python 3 documentation确实提到了base64.encode(...)将在每76字节的输出之后添加新行。相比之下,所有其他的*_encode(...)函数根本没有提到它们的换行行为,这可以被认为是“没有换行行为”。就其价值而言,Python 2 documentation根本没有提到换行。

下面的代码可以工作

auth_base64 = auth_base64.decode('utf-8').replace('\n', '')

与其使用encodestring,不如考虑使用b64encode。稍后不添加\n字符。e、 g

In [11]: auth = b'username@domain.com:passWORD'

In [12]: base64.encodestring(auth)
Out[12]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA==\n'

In [13]: base64.b64encode(auth)
Out[13]: b'dXNlcm5hbWVAZG9tYWluLmNvbTpwYXNzV09SRA=='

它生成除了\n之外的相同编码字符串

相关问题 更多 >