Seite 1 von 1
UTF-8 funktioniert nicht
Verfasst: Donnerstag 22. März 2007, 14:57
von DHK
Hallo,
ich verwende in einem Modul in einem Dictionary Wörter mit Umlauten. Aus diesem Grunde habe ich eine "magic-line" eingefügt:
Dieses Modul importiere ich einer Python-Datei, in der ich wxPython verwende. Leider werden - trotz der Kodierung mit UTF-8 - die Umlaute ganz komisch angezeigt (z. B. anstelle des "ö" u. a. das Zeichen 182 im ISO-Code). Ich habe auch schon probiert, in der Datei, die das Modul importiert, auch noch eine magic-line einzufügen - das hat auch nichts gebracht.
Wenn ich die codings ganz weglasse, erhalte ich eine Fehlermeldung. Aber wenn ich, wie ich oben schon erwähnt habe, eine UTF-8-Kodierungszeile einfüge, geht's auch nicht. Was soll ich machen?
Gruß
DHK
Verfasst: Donnerstag 22. März 2007, 15:05
von mitsuhiko
Verfasst: Donnerstag 22. März 2007, 15:06
von Leonidas
Ok, einige Tipps:
- Datei als UTF-8 deklarieren
- Datei als UTF-8 abspeichern (ja, das ist in der Tat wichtig)
- In dem Programm Unicode-Strings verwenden
- Zum Anzeigen der Strings immer in ein Encoding wandeln, welches vom Programm angezeigt werden kann. Also UTF-8 sollte wx wohl unterstützen.
P.S.: Hat zwar mit deinem Problem jetzt eigentlich nichts zu tun, aber deine Shebang sieht komisch aus...
Verfasst: Donnerstag 22. März 2007, 17:15
von DHK
Hallo,
ich hab mir mal die Unicode-Sachen durchgelesen, recht viel weitergebracht hat mich das auch nicht.
@Leonidas: Wie deklariere ich denn eine Datei als UTF-8 (durch eine entsprechende magic-line, oder)?
Und wie speichere ich sie als UTF-8 ab? Verwende IDLE.
Zur Veranschaulichung hier mal ein paar Auszüge.
Modul (german.py):
Code: Alles auswählen
#!/usr/bin/pythonw
# -*- coding: utf-8 -*-
# ...
menu = { }
# ...
menu['opensearch'] = '&Suche öffnen'
#...
Andere Datei:
Code: Alles auswählen
#!/usr/bin/pythonw
import wx
from german import menu
# hier dann die ganzen wx-Sachen
Gruß
DHK
P.S.: Meine Shebang ist aber in IDLE ganz oben...vielleicht habe ich was falsch eingegeben hier im Forum.
edit: Ich sehe gerade, dass neben meinem Modul in dem Ordner, in dem das Modul ist, auch noch eine Datei mit den gleichen Dateinamen ist. Das ist ein "Compiled Python File". Ich hab es mal mit dem Notepad angeguckt, aber auch da sind die Umlaute schon so merkwürdig dargestellt. Hat das was zu sagen?
Verfasst: Donnerstag 22. März 2007, 17:23
von Leonidas
DHK hat geschrieben:@Leonidas: Wie deklariere ich denn eine Datei als UTF-8 (durch eine entsprechende magic-line, oder)?
Richtig.
DHK hat geschrieben:Und wie speichere ich sie als UTF-8 ab? Verwende IDLE.
Weiß nicht, habe kein IDLE, nutze vim und dort habe ich UTF-8 einfach als Defaultencoding eingestellt.
DHK hat geschrieben:Zur Veranschaulichung hier mal ein paar Auszüge.
Modul (german.py):
Code: Alles auswählen
#!/usr/bin/pythonw
# -*- coding: utf-8 -*-
# ...
menu = { }
# ...
menu['opensearch'] = '&Suche öffnen'
#...
Andere Datei:
Code: Alles auswählen
#!/usr/bin/pythonw
import wx
from german import menu
# hier dann die ganzen wx-Sachen
*Jedihandbewegung* Du schaust dir
gettext an. *Jedihandbewegung*
Ansonsten: Ein kleines u vor die Strings setzen.
DHK hat geschrieben:P.S.: Meine Shebang ist aber in IDLE ganz oben...vielleicht habe ich was falsch eingegeben hier im Forum.
Sie ist aber dennoch seltsam: unter Unix-Systemen gibt es in der Regel kein pythonw (vielleicht außer Mac OS X) und auch dann ist sie unflexibel (für Infos - Forensuche). Besser ``#!/usr/bin/env python(w)`` nutzen.
Verfasst: Donnerstag 22. März 2007, 17:32
von DHK
Hallo Leonidas,
ich habe meine Shebang jetzt deinen Empfehlungen entsprechend geändert.
Wegen diesem gettext: muss ich das importieren (also import gettext) oder soll ich das irgendwie vor die Strings setzen? Entschuldigung für diese "blöde" Frage, aber ich bin Newbie in Python und die von dir verlinkte Seite konnte mir auch nicht recht weiterhelfen.
Das mit dem kleinen u funktioniert auch nicht:
Das gibt eine Fehlermeldung.
Gruß
DHK
Verfasst: Donnerstag 22. März 2007, 19:11
von Leonidas
DHK hat geschrieben:Wegen diesem gettext: muss ich das importieren (also import gettext) oder soll ich das irgendwie vor die Strings setzen? Entschuldigung für diese "blöde" Frage, aber ich bin Newbie in Python und die von dir verlinkte Seite konnte mir auch nicht recht weiterhelfen.
Am besten Suchst du in diesem Forum nach den Begriff gettext, dort findest du einige Beispiele und Dokumentationen. Wenn es dir nicht weiterhilft, kannst du auch einfach einen neuen Thread aufmachen.
DHK hat geschrieben:Das mit dem kleinen u funktioniert auch nicht:
Das gibt eine Fehlermeldung.
Wie ist die Fehlermeldung (Traceback)?
Re: UTF-8 funktioniert nicht
Verfasst: Donnerstag 22. März 2007, 19:57
von gerold
Hi DHK!
So wie es aussieht, verwendest du Windows. Idle kann von sich aus nicht in UTF-8 speichern. Es hat aber keine Probleme, eine bereits im UTF-8 Format gespeicherte Datei zu lesen.
Trotzem empfehle ich dir, verwende unten angezeigten Header und speichere ganz normal ab. Und alles wird gut.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-1")
Ich hätte es auch lieber, wenn alles in UTF-8 wäre, aber das ist im Moment noch nicht so.
mfg
Gerold

Verfasst: Freitag 23. März 2007, 13:53
von DHK
Hallo Gerold!
Vielen Dank für deinen Tipp, jetzt geht's einwandfrei. Auch vielen Dank an alle anderen Tippgeber.
Gruß
DHK
Re: UTF-8 funktioniert nicht
Verfasst: Freitag 23. März 2007, 14:08
von mitsuhiko
gerold hat geschrieben:Trotzem empfehle ich dir, verwende unten angezeigten Header und speichere ganz normal ab. Und alles wird gut.
Workarounds sind nett, aber mit verschiedenen Encodings pro Datei machst du dir nur Probleme. Der Großteil der Entwickler hat denke ich utf-8 im Editor eingestellt und nicht jeder parst die Encodings. Ich hab schon ein paar Dateien entdeckt die windows western ansi (nummer vergessen) encodings hatten, aber in utf-8 abgespeichert waren...
Lieber einen besseren Editor verwenden
