En Python 3, le type Bytes est devenu bien plus utilisé qu’en Python 2, pour ainsi dire, certaines fonctions retourne désormais un objet de type Bytes plutôt qu’un objet de type String.
Voyons un topo sur les différence et comment passer de l’un à l’autre.
0x01. CONCEPT
Conversion string -> bytes :
bytes("ma string")
bytes("ma string","utf-16")
bytes("ma string","iso-8859-1")
...
Conversion bytes -> string :
b"ma string".decode()
b'\xff\xfem\x00a\x00 \x00s\x00t\x00r\x00i\x00n\x00g\x00 \x00\xe0\x00 \x00m\x00o\x00i\x00'.decode('utf-16')
b'ma string \xe0 moi'.decode('iso-8859-1')
...
0x02. EXEMPLES
Vaut mieux parfois des exemples concrets qu’un long discours. Quelques tests :
a = "c est à tester !"
print(type(a))
# Output: <class 'str'>
print(a)
# Output: c est à tester !
b = b"test avec un octet"
print(type(b))
# Output: <class 'bytes'>
a = bytes(a)
# Output: ---------------------------------------------------------------------------
# Output: TypeError Traceback (most recent call last)
# Output: <ipython-input-17-2982bba4a76d> in <module>
# Output: ----> 1 a = bytes(a)
# Output:
# Output: TypeError: string argument without an encoding
print(b.decode())
# Output: test avec un octet
print( type(b.decode()) )
# Output: <class 'str'>
c = "à convertir"
d = bytes(c,'utf-8')
print(d)
# Output: b'\xc3\xa0 convertir'
print( type(d) )
# Output: bytes
print(d.decode())
# Output: à convertir
print( type(d.decode()) )
# Output: <class 'str'>
b = bytes([3])
print( type(b) )
# Output: bytes
i = ord(b)
print( type(i) )
# Output: int
0x03. EN SAVOIR PLUS
Quelques sites qui m’ont aidé à comprendre :
https://codeigo.com/python/convert-bytes-to-string
https://stackoverflow.com/questions/606191/convert-bytes-to-a-string
=> Écrit par : Nicolas, le 25 février 2020