schokokeks.org

Hosting

Unicode-Codec in Python

Di, 5. Dez 2006 - 09:35, CC by-sa

Wenn man in Python mit Unicode-Objekten arbeitet, gerät man gelegentlich an den Punkt, an dem man diese Objekte in Strings konvertieren muss.

Prinzipiell macht Python das implizit, allerdings wird dafür von Haus aus immer der "ascii"-Codec benutzt und es entsteht ein UnicodeEncodeError (oder UnicodeDecodeError) wenn ein Umlaut oder ein sonstiges Non-ASCII-Zeichen (ASCII-Wert über 127) auftaucht.

Da mich das heute einiges an Nerven gekostet hat, habe ich mich umgeschaut, wie man denn den Standard-Codec von »ascii« auf »utf8« umstellen kann. Leider ist das so nicht wirklich vorgesehen.
Für das Setzen dieses Codecs ist die bei Python mitgelieferte Bibliothek site.py verantwortlich, wo es auch bereits entsprechenden Code gibt, der aber mittels »if 0:« unbenutzt gemacht wurde.
Allerdings sucht »site.py« eine Bibliothek »sitecustomize.py« ein, sofern sie im PYTHONPATH existiert.

Also habe ich eine Datei sitecustomize.py mit nachfolgendem Inhalt erstellt:
import sys
sys.setdefaultencoding('utf8')

Diese Datei wurde auf schokokeks.org unter /usr/local/lib/python/keks abgelegt, was sich im Standard-Python-Pfad unserer Benutzer befindet.

Jetzt wird zur Konversion zwischen Unicode-Objekten und Strings immer der »utf8«-Codec benutzt und es gibt keine UnicodeEncodeErrors mehr. Selbstredend wird dadurch in manchen Fällen die Fehlersuche erschwert! Wo es sinnvoll ist, sollte man weiterhin die Konversionen manuell machen!

Hintergrund: Die mitgelieferte »site.py« läuft bei jedem Python-Aufruf implizit und entfernt setdefaultencoding aus sys, wenn sie fertig ist.