删除新行" \ n"来自Python3中的base64编码字符串?

时间:2015-06-04 14:52:53

标签: python python-3.x base64

我尝试在Python3中建立HTTPS连接,当我尝试对用户名和密码进行编码时,base64 encodebytes方法会返回带有新行字符的编码值" \ 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', '')

有什么想法吗?感谢

5 个答案:

答案 0 :(得分:49)

而不是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

外,它产生相同的编码字符串

答案 1 :(得分:6)

以下代码可以使用

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

答案 2 :(得分:1)

我应用了@Harsh 提示和这两个函数来为我的应用程序编码和解码二进制数据工作。我的要求是能够在 HTML src 元素和 CSS @font-face 语句中使用数据 URI 来表示二进制对象,特别是图像、声音和字体。这些功能有效。

import binascii

def string_from_binary(binary): 
    return binascii.b2a_base64(binary, newline=False).decode('utf-8')

def string_to_binary(string): 
    return binascii.a2b_base64(string.encode('utf-8'))

答案 3 :(得分:0)

我同意Mandar's observation的观点,即base64.xxxx_encode()将产生没有换行符\n的输出。

对于那些想要获得更自信的理解而不仅仅是观察的人,这些是我可以在这个主题上找到的官方承诺(某种程度上)。 Python 3 documentation确实提到base64.encode(...)将在每输出76个字节后添加换行符。与此相比,所有其他*_encode(...)函数根本没有提及其换行行为,可以将其视为“无换行行为”。就其价值而言,Python 2 documentation完全没有提到换行。

答案 4 :(得分:0)

对于python3使用:-

binascii.b2a_base64(cipher_text, newline = False

对于python2使用:

binascii.b2a_base64(cipher_text) [:-1]