Il suffit de poster ceci pour que je puisse le rechercher plus tard, car cela semble toujours me surprendre:
$ 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'"
Comme question: comment imprimer une bytes
chaîne binaire ( ) en Python 3, sans le b'
préfixe?
python
string
python-3.x
sdaau
la source
la source
Réponses:
Utilisez
decode
:la source
utf-8
par défaut? Je ne veux pas utiliser le à.decode('utf-8')
chaque fois que j'imprime quelque chose.curses.version
n'est pas NoneSi les octets utilisent déjà un codage de caractères approprié; vous pouvez les imprimer directement:
ou
la source
Si nous examinons la source de
bytes.__repr__
, il semble que leb''
soit intégré à la méthode.La solution de contournement la plus évidente consiste à découper manuellement
b''
le résultatrepr()
:la source
repr(x)[2:-1]
, produit unstr
objet qui s'imprimera comme vous le souhaitez. En particulier,repr(b'\x01')[2:-1]
retourne la chaîne\\x01
, tandis quedecode()
retournera\x01
ce qui ne fonctionne pas comme on le souhaiterait avecprint()
. Pour être encore plus explicite,print(repr(b'\x01')[2:-1])
imprimera\x01
tandis queprint(b'\x01'.decode())
n'imprimera rien.print(repr(b"\x01".decode()))
imprimera'\x01'
(une chaîne comprenant les guillemets simples), de sorte queprint(repr(b"\x01".decode())[1:-1])
imprime\x01
(une chaîne sans les guillemets simples).Si les données sont dans un format compatible UTF-8, vous pouvez convertir les octets en une chaîne.
Éventuellement, convertissez d'abord en hexadécimal, si les données ne sont pas déjà compatibles UTF-8. Par exemple, lorsque les données sont des octets bruts réels.
la source