Ho un database (mysql) in cui voglio memorizzare i dati in pickled.Come decodificare gli unicodi e salvarli nei database utf-8
I dati possono essere ad esempio un dizionario, che può contenere unicode, ad es.
data = {1 : u'é'}
e il database (mysql) è in utf-8.
Quando ho Pickle,
import pickle
pickled_data = pickle.dumps(data)
print type(pickled_data) # returns <type 'str'>
il pickled_data risultante è una stringa.
Quando si tenta di archiviare questo in un database (ad esempio in un campo di testo), questo può causare problemi. In particolare, sto ottenendo ad un certo punto uno
UnicodeDecodeError "'utf8' codec can't decode byte 0xe9 in position X"
quando si tenta di salvare il pickled_data nel database. Questo ha senso perché pickled_data può avere caratteri non-utf-8. La mia domanda è: come immagazzino pickled_data su un database utf-8?
Vedo due possibili candidati:
Encode il risultato della pickle.dump in UTF-8 e conservarla. Quando voglio pickle.load, devo decodificarlo.
Memorizza la stringa decapata in formato binario (come?), Che obbliga tutti i caratteri ad essere all'interno di ascii.
Il mio problema è che non vedo quali sono le conseguenze della scelta di una di queste opzioni a lungo termine. Dato che il cambiamento richiede già qualche sforzo, sono spinto a chiedere un parere su questo tema, chiedendo eventuali candidati migliori.
(PS Questo è utile ad esempio in Django)
Opzione 3: Archivia i dati Unicode come stringhe codificate UTF-8. –
Opzione 4: utilizzare invece un tipo di colonna binario. –
I dati di pickle sono dati * binari *. Non puoi codificarlo in UTF-8 (una codifica di testo). –