UTF-8 funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Donnerstag 22. März 2007, 14:57

Hallo,
ich verwende in einem Modul in einem Dictionary Wörter mit Umlauten. Aus diesem Grunde habe ich eine "magic-line" eingefügt:

Code: Alles auswählen

#!/usr/bin/pythonw
# -*- coding: utf-8 -*-
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
Opera ist noch immer der beste...
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 22. März 2007, 15:05

http://p-nand-q.com/python/unicode_faq.html bzw [wiki]Unicode[/wiki]durchlesen :)
TUFKAB – the user formerly known as blackbird
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 22. März 2007, 15:06

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...
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Donnerstag 22. März 2007, 17:15

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?
Opera ist noch immer der beste...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 22. März 2007, 17:23

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Donnerstag 22. März 2007, 17:32

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:

Code: Alles auswählen

menu['opensearch'] = u'&Suche öffnen'
Das gibt eine Fehlermeldung.

Gruß

DHK
Opera ist noch immer der beste...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 22. März 2007, 19:11

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:

Code: Alles auswählen

menu['opensearch'] = u'&Suche öffnen'
Das gibt eine Fehlermeldung.
Wie ist die Fehlermeldung (Traceback)?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Donnerstag 22. März 2007, 19:57

DHK hat geschrieben:

Code: Alles auswählen

#!/usr/bin/pythonw
# -*- coding: utf-8 -*-
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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DHK
User
Beiträge: 26
Registriert: Sonntag 18. März 2007, 14:55
Wohnort: Bayern

Freitag 23. März 2007, 13:53

Hallo Gerold!
Vielen Dank für deinen Tipp, jetzt geht's einwandfrei. Auch vielen Dank an alle anderen Tippgeber.

Gruß

DHK
Opera ist noch immer der beste...
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 23. März 2007, 14:08

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 ;)
TUFKAB – the user formerly known as blackbird
Antworten