簡體   English   中英

從 Python3 中的 base64 編碼字符串中刪除新行“\\n”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM