Posten Sie dies einfach, damit ich später danach suchen kann, da es mich immer zu überraschen scheint:
$ python3.2
Python 3.2 (r32:88445, Oct 20 2012, 14:09:50)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
>>> print(curses.version)
b'2.2'
>>> print(str(curses.version))
b'2.2'
>>> print(curses.version.encode('utf-8'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'encode'
>>> print(str(curses.version).encode('utf-8'))
b"b'2.2'"
Als Frage: Wie drucke ich eine binäre ( bytes
) Zeichenfolge in Python 3 ohne das b'
Präfix?
python
string
python-3.x
sdaau
quelle
quelle
Antworten:
Verwendung
decode
:quelle
utf-8
standardmäßig? Ich meine, ist es schlecht, es standardmäßig zu verwenden? Ich möchte das nicht.decode('utf-8')
jedes Mal verwenden, wenn ich etwas drucke.curses.version
Wenn die Bytes bereits eine geeignete Zeichenkodierung verwenden; Sie können sie direkt ausdrucken:
oder
quelle
Wenn die Daten in einem UTF-8-kompatiblen Format vorliegen, können Sie die Bytes in eine Zeichenfolge konvertieren.
Optional können Sie zuerst in hex konvertieren, wenn die Daten noch nicht UTF-8-kompatibel sind. ZB wenn die Daten tatsächliche Rohbytes sind.
quelle
Wenn wir uns die Quelle für ansehen
bytes.__repr__
, sieht es so aus, als ob dieb''
in die Methode eingebrannt ist.Die naheliegendste Problemumgehung besteht darin,
b''
das Ergebnis manuell zu entfernenrepr()
:quelle
repr(x)[2:-1]
erzeugt nämlich einstr
Objekt, das wie gewünscht gedruckt wird. Gibt insbesondererepr(b'\x01')[2:-1]
die Zeichenfolge zurück\\x01
, während zurückgegebendecode()
wird,\x01
was nicht wie gewünscht funktioniertprint()
. Um noch expliziter zu sein,print(repr(b'\x01')[2:-1])
wird gedruckt,\x01
währendprint(b'\x01'.decode())
nichts gedruckt wird.print(repr(b"\x01".decode()))
wird gedruckt'\x01'
(eine Zeichenfolge einschließlich der einfachen Anführungszeichen), so dassprint(repr(b"\x01".decode())[1:-1])
gedruckt wird\x01
(eine Zeichenfolge ohne die einfachen Anführungszeichen).