2015-10-21 8 views
5

Zastanawiam się, czy możliwe jest przekonwertowanie ciągu bajtów, który otrzymałem z odczytu pliku na ciąg znaków (czyli type(output) == str). Wszystko, co znalazłem w Google do tej pory, to odpowiedzi takie jak: How do you base-64 encode a PNG image for use in a data-uri in a CSS file?, które wygląda na to, że działałoby w Pythonie 2 (gdzie, jeśli się nie mylę, ciągi były ciągami bajtów), ale które nie działają w pythonie 3.4 już.Konwertuj ciąg bajtowy na łańcuch zakodowany na podstawie 64 (wyjście nie będące ciągiem bajtowym)

Powodem chcę przekonwertować ten wynikowy ciąg bajtów do normalnego ciąg jest, że chcę, aby skorzystać z tej base64 zakodowane dane przechowywać w obiekcie JSON, ale wciąż otrzymuję błąd podobny do:

TypeError: b'Zm9v' is not JSON serializable 

Oto minimalne przykładem dokąd idzie źle:

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

więc moje pytanie brzmi: czy istnieje sposób przekonwertować ten obiekt typu bytes do obiektu typu str przy jednoczesnym zachowaniu base64 kodowanie (tak w tym przykładzie chcę wynikiem będzie ["Zm9v"]. czy to możliwe?

Odpowiedz

6

Spróbuj

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

zamiast

data = b'foo' 

aby przekształcić go w ciąg.

+0

Ah snap, który wygląda tak, jak to działa. Dziękuję bardzo! – Joeytje50