servuzmaxguat

Mit Python eine Datei als utf-8 speichern

In Widrigkeiten des Lebens, programming, python on März 23, 2008 at 7:04

Letztens landete mal eine Suchanfrage mit den Stichworten “Python Datei als utf-8 speichern” auf diesem Blog.

Mittlerweile bin ich auf ein mögliches Problem, das den Stichworten entspricht, gestoßen und habe aber auch eine Lösung gefunden.

Das Problem sei sehr grob umrissen: Ein aktuelles Python kann utf-8 eigentlich ganz prima verarbeiten. Manchmal, meistens ist man selbst schuld, entstehen Ungenauigkeiten zum Beispiel beim Schreiben und Lesen von Dateien.

Python erstellt normalerweise eine Datei ohne BOM. Es kann nun aber sein, dass Python mit dem Schreiben in oder Lesen aus dieseR Datei abbricht, sobald ein Zeichen not in ASCII range (o.ä.) auftritt, z.B. wenn ein Benutzer ein Eingabefeld ein simples “ä” eingibt, das in die Datei geschrieben werden soll.Die Lösung ist, Python den String beim Schreiben in utf-8 encodieren zu lassen:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
MyString = KOMMT_VON_IRGENDWO_UND_ENTHÄLT_VIELLEICHT_ZWEI_Äs
f=open('/tmp/workfile', 'w' )
f.write(MyString.encode("utf-8"))

Generell: Man sollte lieber utf-8 Dateien ohne BOM (z.B. bei PHP, Firefox, LaTeX) verwenden; allerdings denken dann manche Programme gerne es handele sich um ASCII. Wenn man sicher ist, dass die Datei UTF-8 enthalten wird, sollte man es am Anfang deklarieren, z.B. mit # -*- coding: utf-8 -*- bei Python, oder der utf-8-Deklaration in HTML usw.Ein Qualitätsmerkmal guter Editoren ist, dass man das BOM an- und abschalten kann, z.B SubEthaEdit fürn Mac oder SuperEdi für Windows. Die bisher umfangreichste Codierungsliste fand ich bei Superedi.

Vielleicht hilft’s ja jemandem …

All comments are screened for appropriateness. Commenting is a privilege, not a right. Good comments will be cherished, bad comments will be deleted.