[英]Remove the new line “\n” from base64 encoded strings in Python3?
我正在嘗試在 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', '')
有任何想法嗎? 謝謝
而不是encodestring
考慮使用b64encode
。 后來不加\\n
字符。 例如
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
以下代碼將工作
auth_base64 = auth_base64.decode('utf-8').replace('\n', '')
對於 Python 3 使用:
binascii.b2a_base64(cipher_text, newline=False)
對於 Python 2 使用:
binascii.b2a_base64(cipher_text)[:-1]
我同意base64.xxxx_encode()
的觀察,即base64.xxxx_encode()
將產生沒有換行\\n
輸出。
對於那些想要更自信的理解而不僅僅是觀察的人來說,這些是我可以在這個主題上找到的官方承諾(有點)。 Python 3 文檔確實提到base64.encode(...)
會在每 76 個字節的輸出后添加換行符。 相比之下,所有其他*_encode(...)
函數根本沒有提到它們的換行行為,這可以說是“無換行行為”。 就其價值而言, Python 2 文檔根本沒有提及有關換行的任何內容。
我應用了@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'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.