Só estou postando isso para que eu possa pesquisar mais tarde, pois sempre parece me confundir:
$ 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 questão: como imprimir uma bytes
string binary ( ) em Python 3, sem o b'
prefixo?
python
string
python-3.x
sdaau
fonte
fonte
Respostas:
Use
decode
:fonte
utf-8
por padrão? Não quero usar.decode('utf-8')
toda vez que imprimo algo.curses.version
se não é NenhumSe os bytes já usam uma codificação de caracteres apropriada; você pode imprimi-los diretamente:
ou
fonte
Se dermos uma olhada na fonte de
bytes.__repr__
, parece que ob''
está embutido no método.A solução alternativa mais óbvia é cortar manualmente o
b''
do resultanterepr()
:fonte
repr(x)[2:-1]
, produz umstr
objeto que será impresso como desejar. Em particular,repr(b'\x01')[2:-1]
retorna a string\\x01
, enquantodecode()
irá retornar,\x01
que não funciona como desejadoprint()
. Para ser ainda mais explícito,print(repr(b'\x01')[2:-1])
imprimirá\x01
enquantoprint(b'\x01'.decode())
não imprimirá nada.print(repr(b"\x01".decode()))
irá imprimir'\x01'
(uma string incluindo as aspas simples), de forma queprint(repr(b"\x01".decode())[1:-1])
imprime\x01
(uma string sem as aspas simples).Se os dados estiverem em um formato compatível com UTF-8, você pode converter os bytes em uma string.
Opcionalmente, converta em hexadecimal primeiro, se os dados ainda não forem compatíveis com UTF-8. Por exemplo, quando os dados são bytes brutos reais.
fonte