Convert byte string to base64-encoded string (output not being a byte string)

Joeytje50 picture Joeytje50 · Oct 21, 2015 · Viewed 15.8k times · Source

I was wondering if it is possible to convert a byte string which I got from reading a file to a string (so type(output) == str). All I've found on Google so far has been answers like How do you base-64 encode a PNG image for use in a data-uri in a CSS file?, which does seem like it would work in python 2 (where, if I'm not mistaken, strings were byte strings anyway), but which doesn't work in python 3.4 anymore.

The reason I want to convert this resulting byte string to a normal string is that I want to use this base64-encoded data to store in a JSON object, but I keep getting an error similar to:

TypeError: b'Zm9v' is not JSON serializable

Here's a minimal example of where it goes wrong:

import base64
import json
data = b'foo'
myObj = [base64.b64encode(data)]
json_str = json.dumps(myObj)

So my question is: is there a way to convert this object of type bytes to an object of type str while still keeping the base64-encoding (so in this example, I want the result to be ["Zm9v"]. Is this possible?

Answer

Victor picture Victor · Oct 21, 2015

Try

data = b'foo'.decode('UTF-8')

instead of

data = b'foo'

to convert it into a string.