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 kann Python das auf implizit, allerdings wird dafür immer der "ascii"-Codec benutzt und es entsteht ein UnicodeEncodeError (oder UnicodeDecodeError) wenn ein Umlaut oder ein sonstiges Non-ASCII-Zeichen auftaucht.
Da mich das heute einiges an Nerven gekostet hat, habe ich mich umgeschaut, wie man denn den Standard-Codec von ascii auf utf-8 umstellen kann. Leider ist das so nicht wirklich vorgesehen.
Für das Setzen dieses Codecs ist site.py verantwortlich, wo es auch bereits entsprechenden Code gibt, der aber mittels »if 0:« unbenutzt gemacht wurde.
Allerdings bindet site.py eine sitecustomize.py ein, sofern sie im PYTHONPATH existiert.
Also habe ich mir diese Datei erstellt:
import sys
sys.setdefaultencoding('utf8')
Jetzt werden alle Unicode-Objekte mit dem utf8-Codec in strings umgewandelt und es gibt keine UnicodeEncodeErrors mehr.
disclaimer: 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.