325 votes

Pourquoi ai-je besoin de « b » pour coder une chaîne en Base64 ?

Suite à cet exemple python , j'encode une chaîne en Base64 avec :

 >>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'

Mais, si je laisse de côté le b tête :

 >>> encoded = base64.b64encode('data to be encoded')

J'obtiens l'erreur suivante :

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python32\lib\base64.py", line 56, in b64encode
   raise TypeError("expected bytes, not %s" % s.__class__.__name__)
   TypeError: expected bytes, not str

Pourquoi est-ce?

39voto

Alecz Points 33

Si les données à encoder contiennent des caractères "exotiques", je pense qu'il faut encoder en "UTF-8"

 encoded = base64.b64encode (bytes('data to be encoded', "utf-8"))

30voto

alfredocambera Points 539

Si la chaîne est Unicode, le moyen le plus simple est :

 import base64                                                        

a = base64.b64encode(bytes(u'complex string: ñáéíóúÑ', "utf-8"))

# a: b'Y29tcGxleCBzdHJpbmc6IMOxw6HDqcOtw7PDusOR'

b = base64.b64decode(a).decode("utf-8", "ignore")                    

print(b)
# b :complex string: ñáéíóúÑ

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X