Ho un progetto Django che utilizza un database SQLite che può essere scritto da uno strumento esterno. Il testo dovrebbe essere UTF-8, ma in alcuni casi ci saranno errori nella codifica. Il testo proviene da una fonte esterna, quindi non posso controllare la codifica. Sì, so che potrei scrivere un "layer wrapping" tra l'origine esterna e il database, ma preferisco non doverlo fare, soprattutto perché il database contiene già molti dati "cattivi".Cambia text_factory in Django/sqlite
La soluzione in SQLite è di cambiare il text_factory a qualcosa di simile: lambda x: unicode(x, "utf-8", "ignore")
Tuttavia, non so come dire al conducente modello di Django questo.
L'eccezione che ottengo è:
'Could not decode to UTF-8 column 'Text' with text' in /var/lib/python-support/python2.5/django/db/backends/sqlite3/base.py in execute
In qualche modo ho bisogno di dire al driver SQLite non cercare di decodificare il testo UTF-8 (almeno non utilizzando l'algoritmo standard, ma ha bisogno usare la mia variante fail-safe).
Grazie per l'input! Quanto sopra ha funzionato con alcune modifiche (in particolare, è necessario prima creare un cursore, altrimenti DatabaseWrapper.connection è None). Mi sono strappato i capelli per questo. – Krumelur
@Krumelur puoi pubblicare la soluzione completa? – user985541