web-dev-qa-db-ja.com

Python3のbase64エンコード文字列から新しい行「\ n」を削除しますか?

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'[email protected]:passWORD'
auth_base64 = base64.encodebytes(auth)
auth_base64 = auth_base64.replace('\n', '')

何か案は?ありがとう

20
Mo.

次のコードが機能します

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

Mandarの観測 に同意すると、base64.xxxx_encode()は行の折り返しなし_\n_を出力します。

単なる観察よりも自信を持って理解したい人のために、これらはこのトピックで見つけることができる公式の約束(一種)です。 Python 3のドキュメント は、base64.encode(...)が76バイトの出力ごとに改行を追加することを言及しています。それと比較して、他のすべての*_encode(...)関数は、ラインラップ動作についてまったく言及していません。これは、おそらく「ラインラップ動作なし」と見なすことができます。価値があるのは、 Python 2のドキュメント では行の折り返しについて何も言及されていません。

1
RayLuo

python3を使用する場合:-

binascii.b2a_base64(cipher_text、newline = False

python2を使用する場合:

binascii.b2a_base64(cipher_text)[:-1]

0
Harsh