Allgemeine Lösung für Umlautprobleme?

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.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Wie auch immer:

Code: Alles auswählen

Python 2.2 (#1, Feb 17 2003, 21:43:03) [C] on aix4
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.platform
'aix4'
>>> 
Das Problem hatte ich auch schonmal, rauszufinden wie der entsprechenden Plattform-Strings heissen. Mac OSX ist ja auch Linux-like, da kommt bei sys.platform irgendwas mit "darwin" raus... (der Name des Kernels.)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BlackJack hat geschrieben:Es gibt keinen Weg die Kodierungen verlässlich zu raten.
[...]
Optionen anbieten mit denen der Anwender explizit sagen kann was er haben möchte.
Hi BlackJack!

Leider ist es so, dass man die Kodierung raten muss. Allerdings kann man das Raten verbessern. Je mehr Informationen ich über die Platform habe, desto eher bekomme ich das korrekte Encoding raus. Ein 90 % richtig geratenes Encoding ist ja auch nicht schlecht, oder? Außerdem könnte ich ja prüfen, ob es eine Konfigurationsdatei gibt, die ein Encoding vorgibt, oder das Umleiten über den Stream-Writer unterbindet.

encoding.ini (alles automatisch):

Code: Alles auswählen

[stdout]
encoding = Auto
encoding.ini (utf-8 vorgegeben):

Code: Alles auswählen

[stdout]
encoding = utf-8
encoding.ini (nicht verwenden):

Code: Alles auswählen

[stdout]
encoding = None
Wenn die INI-Datei nicht im Projektordner existiert, dann wird der Encodinghelper für STDOUT verwendet und es wird versucht, das Encoding automatisch raus zu bekommen. Wenn ich ihn als Programmierer nicht verwenden möchte, dann muss ich ihn ja nicht importieren.

Und? Klingt das für dich besser?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ich habe mal wieder etwas am Encodinghelper geändert.
Wenn erkannt wird, dass IDLE mit im Spiel ist, dann leitet
der Encodinghelper STDOUT nicht um.

Trac: http://gelb.bcom.at/trac/misc/wiki/Encodinghelper
Quellcode: http://gelb.bcom.at/trac/misc/browser/e ... ghelper.py

Damit der Zweck dieses Moduls nicht vergessen wird:
Importiert man das Modul ``encodinghelper.py``, dann wird geprüft, welches Encoding für STDOUT eingestellt ist. Gibt ``sys.stdout.encoding`` diese Information nicht her, wird herausgefunden, welches Betriebssystem verwendet wird und auf Grund dieser Information noch einmal versucht, das Encoding herauszufinden.

Danach wird STDOUT über den StreamWriter des Moduls "codecs" umgeleitet und damit automatisch von **Unicode** in das Zielplattform-Encoding umgewandelt.

Falls dieser Automatismus das korrekte Encoding nicht herausfinden kann, kann man das Encoding in eine INI-Datei schreiben, die vom ``encodinghelper.py`` ausgelesen wird. So kann man auch Sonderfälle abdecken.

Verbesserungsvorschläge sind erwünscht.

lg
Gerold
:-)
Zuletzt geändert von gerold am Mittwoch 1. November 2006, 08:33, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab mal Links hier eingefügt:
[wiki]Von Umlauten, Unicode und Encodings[/wiki]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten