Der Zweck von base64.b64encode()
besteht darin, binäre Daten in ASCII-sicheren "Text" umzuwandeln. Die Methode gibt jedoch ein Objekt vom Typ Bytes zurück:
Es ist einfach, diese Ausgabe und decode()
it zu nehmen, aber meine Frage ist: Was ist eine Bedeutung von base64.b64encode()
, die bytes
zurückgibt, anstatt eine str
?
Der Zweck der Funktion base64.b64encode () besteht darin, binäre Daten in ASCII-sicheren "text"
zu konvertieren
Python stimmt dem nicht zu - base64 wurde absichtlich als Binärtransformation klassifiziert.
Es war eine Design-Entscheidung in Python 3, die Trennung von Bytes und Text zu erzwingen und implizite Transformationen zu verbieten. Python ist jetzt so streng darum, dass bytes.encode
gar nicht existiert, und so würde b'abc'.encode('base64')
eine AttributeError
auslösen.
Die Meinung der Sprache ist, dass ein bytestring-Objekt bereits kodiert ist. Ein Codec, der Bytes in Text codiert, passt nicht in dieses Paradigma, denn wenn Sie von der Byte-Domäne zur Text-Domäne wechseln wollen, ist es eine Dekodierung . Beachten Sie, dass rot13
encoding ebenfalls aus der Liste der Standardkodierungen für dasselbe verbannt wurde Grund - es passte nicht richtig in das Python 3 Paradigma.
Es kann auch ein Performance-Argument geben: Nehmen wir an, Python hat automatisch die Decodierung der base64-Ausgabe behandelt, die eine ASCII-codierte binäre Repräsentation ist, die von C-Code aus binascii
, in ein Python-Objekt in der Textdomäne. Wenn Sie tatsächlich die Bytes wollten, müssten Sie die Decodierung einfach durch erneutes Codieren in ASCII rückgängig machen. Es wäre eine verschwenderische Rundreise, eine unnötige Doppel-Verneinung. Es ist besser, sich für den Dekodier-zu-Text-Schritt zu entscheiden.
Es ist unmöglich für b64encode()
zu wissen, was Sie mit seiner Ausgabe machen wollen.
Während Sie in vielen Fällen den codierten Wert in vielen anderen als Text behandeln möchten, z. B. wenn Sie ihn über ein Netzwerk senden, sollten Sie ihn stattdessen als Byte behandeln.
Da b64encode()
nicht wissen kann, weigert es sich zu raten. Und da die Eingabe bytes
ist, bleibt die Ausgabe derselbe Typ, anstatt implizit auf str
gezwungen zu werden.
Wie Sie feststellen, ist die Dekodierung der Ausgabe in str
einfach:
... als auch explizit über das Ergebnis.
Nebenbei bemerkt, ist es trotzdem erwähnenswert, dass base64.b64decode()
(Anmerkung: de -Code, nicht en code) hat str
seit Version 3.3 akzeptiert, die Änderung war etwas umstritten .
Tags und Links python unicode base64 encoding python-3.x