Solo publico esto para poder buscarlo más tarde, ya que siempre parece desconcertarme:
$ 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'"
Como pregunta: ¿cómo imprimir una bytescadena binaria ( ) en Python 3, sin el b'prefijo?
python
string
python-3.x
sdaau
fuente
fuente

Respuestas:
Utilizar
decode:fuente
utf-8por defecto? No quiero usar el.decode('utf-8')cada vez que imprimo algo.curses.versionno sea NingunoSi los bytes ya utilizan una codificación de caracteres adecuada; puedes imprimirlos directamente:
o
fuente
Si echamos un vistazo a la fuente de
bytes.__repr__, parece queb''está integrado en el método.La solución alternativa más obvia es cortar manualmente
b''el resultado del resultadorepr():fuente
repr(x)[2:-1], produce unstrobjeto que se imprimirá como desee. En particular,repr(b'\x01')[2:-1]devuelve la cadena\\x01, mientrasdecode()que devolverá\x01que no funciona como uno desearíaprint(). Para ser aún más explícito,print(repr(b'\x01')[2:-1])imprimirá\x01mientrasprint(b'\x01'.decode())que no imprimirá nada.print(repr(b"\x01".decode()))imprimirá'\x01'(una cadena que incluye las comillas simples), de modo queprint(repr(b"\x01".decode())[1:-1])imprima\x01(una cadena sin las comillas simples).Si los datos están en un formato compatible con UTF-8, puede convertir los bytes en una cadena.
Opcionalmente, convierta primero a hexadecimal, si los datos aún no son compatibles con UTF-8. Por ejemplo, cuando los datos son bytes sin procesar reales.
fuente