Beste Weg, um String in Bytes in Python 3 konvertieren?
Es scheint zwei verschiedene Möglichkeiten zu geben, eine Zeichenkette in Bytes umzuwandeln, wie aus den Antworten auf https://stackoverflow.com/questions/5471158/typeerror-str-does-not-support-the-buffer-interface hervorgeht.
Welche dieser Methoden ist besser bzw. pythonischer? Oder ist das nur eine Frage der persönlichen Vorliebe?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
718
3
Wenn Sie sich die Dokumentation für "Bytes" ansehen, verweist sie auf [Bytearray] (https://docs.python.org/3/library/functions.html#func-bytearray):
Wenn es sich um eine ganze Zahl handelt, hat das Array diese Größe und wird mit Null-Bytes initialisiert.__
Wenn es sich um ein Objekt handelt, das der Pufferschnittstelle entspricht, wird ein schreibgeschützter Puffer des Objekts verwendet, um das Byte-Array zu initialisieren.__
Wenn es sich um eine Iterable handelt, muss es eine Iterable von Ganzzahlen im Bereich 0
Es ist einfacher als man denkt:
Der absolut beste Weg ist keiner der beiden, sondern der dritte. Der erste Parameter von
encode
ist seit Python 3.0 standardmäßig'utf-8'
. Der beste Weg ist alsoDies ist auch schneller, da das Standardargument im C-Code nicht die Zeichenkette
"utf-8"
ergibt, sondernNULL
, was viel schneller zu prüfen ist!Hier sind einige Zeitangaben:
Trotz der Warnung waren die Zeiten nach wiederholten Durchläufen sehr stabil - die Abweichung betrug nur ~2 Prozent.
Die Verwendung von
encode()
ohne ein Argument ist nicht mit Python 2 kompatibel, da in Python 2 die Standard-Zeichenkodierung ASCII ist.