Hi Francesco!
Francesco hat geschrieben:leider macht das keinen Unterschied.
Code: Alles auswählen
# -*- coding: UTF-8 -*-
print u': '.join(["copyright", u"® Project 5"])
UnicodeDecodeError: 'utf8' codec can't decode byte 0xae in position 0: unexpected code byte
Du gibst im Kopf das falsche Encoding an.
Python glaubt, dass der Quellcode UTF8-codiert gespeichert wurde. Wenn vor einem String ein ``u`` steht, dann bedeutet das für Python, dass dieser String nach Unicode umgewandelt werden soll. Dafür braucht Python irgend einen Hinweis auf das Coding des Quellcodes. Steht im Kopf ``# -*- coding: UTF-8 -*-``, dann glaubt Python, dass der Quellcode UTF-8-codiert ist und wandelt auf Basis dieser Information von UTF-8 nach UNICODE um. Pech, wenn der Quellcode nicht UTF-8, sondern iso-8859-1- oder cp1252-codiert ist.
Im Kopf muss immer das korrekte Encoding stehen. Wenn du unter Windows eine Textdatei erstellst, dann ist diese automatisch cp1252-codiert. Ich verwende im Kopf aber meistens iso-8859-1, da dieses Coding ähnlich dem cp1252 ist und ich oft zwischen Windows und Linux hin und her wechsle.
Wenn du also deinen Quellcode nicht explizit nach UTF-8 umgewandelt hast, dann stimmt die Angabe im Kopf nicht.
Francesco hat geschrieben:1.,) ich mag Unicode nicht.
2.) Ich möchte kein wxPython Unicode build installieren.
Da unterscheiden wir uns ziemlich extrem. -- Ich verstehe nicht, warum es überhaupt eine ANSI-Version von wxPython gibt und ärgere mich immer wieder darüber.
Die Sache ist für mich ziemlich einfach. Bei der Unicode-Version von wxPython übergebe ich an wxPython Unicode-Strings und dann muss ich mich um nichts mehr kümmern. Wenn ich etwas von wxPython zurück bekomme, dann weiß ich, dass ich Unicode-Strings zurück bekomme. Das ist eine Konstante, die ich sehr schätze. Gerade auch im Zusammenspiel mit Datenbanken. Übergebe ich an ``psycopg2`` (=PostgreSQL) einen Unicode-String, dann kümmert sich psycopg2 darum, dass dieser korrekt in der Datenbank gespeichert wird.
Wenn ich mit der ANSI-Version von wxPython arbeiten möchte, dann muss ich mich immer darum kümmern, dass sich das Coding nicht verändert oder es gibt Probleme wenn ich unterschiedliche Betriebssysteme verwende usw. Ich muss wxPython mitteilen, welches Coding ich ihm übergebe, damit es mit den Umlauten "immer" und nicht nur meistens klappt.
``wx.SetDefaultPyEncoding(encoding)`` muss immer mit dem Encoding des Python-Moduls zusammenpassen, sonst gibt es ein Chaos. --> Fazit: nur die Unicode-Version von wxPython wäre mir lieber als dieses gemischte Doppel zwischen ANSI und UNICODE.
Francesco hat geschrieben:Ich hasse Unicode und encoding, utf-8, cp1252, iso-8859 und co.
Es ist auch ein sch... Thema. Wären alle Betriebssystemumgebungen UTF-8, dann gäbe es diese Probleme nicht. Ich hoffe, dass es in etwa zehn Jahren so weit ist, dass man von den Begriffen ANSI und ASCII nur mehr im Museum etwas hört.
lg
Gerold