Unicode DefaultEncoding

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
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Unicode DefaultEncoding

Beitragvon nkoehring » Donnerstag 2. August 2007, 19:03

Hallo...

wie kann man das DefaultEncoding bei Unicode-Strings global setzen? Irgendwie steht es auf ASCII, aber ich will ja lieber UTF-8...

Code: Alles auswählen

# -*- coding: UTF-8 -*-

import wx
import cPickle, shelve
import zlib
import time

wx.SetDefaultPyEncoding("UTF-8")


...also das habe ich gemacht.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Unicode DefaultEncoding

Beitragvon gerold » Donnerstag 2. August 2007, 19:40

nkoehring hat geschrieben:wie kann man das DefaultEncoding bei Unicode-Strings global setzen? Irgendwie steht es auf ASCII, aber ich will ja lieber UTF-8...

Code: Alles auswählen

# -*- coding: UTF-8 -*-
import wx
wx.SetDefaultPyEncoding("UTF-8")

Hallo nkoehring!

Du hast die Frage falsch gestellt. Unicode ist Unicode und braucht kein Encoding. Nur wenn du einen Bytestring nach Unicode umwandeln möchtest, dann musst du wissen, in welchem Encoding der Bytestring ist. Und umgekehrt.

Wenn dein Modul beim Speichern im Encoding UTF-8 gespeichert wurde, dann ist es auch wichtig und korrekt, wenn du im Kopf des Moduls mit dem "Encoding Cookie" Python bescheid gibst, dass das Modul im Encoding UTF-8 gespeichert wurde. So weiß Python beim Interpretieren, dass alle Texte, die mit einem führenden ``u`` gekennzeichnet wurden, UTF-8-Bytestrings sind, die es vor der Verwendung nach Unicode umwandeln soll. (z.B. ``u"Österreich"``)

Wenn du an wxPython einen Unicode-String übergibst, dann weiß wxPython dass es sich um Unicode handelt und arbeitet dementsprechend damit. Wenn du die Unicode-Version von wxPython installiert hast (was ratsam ist), dann bekommst du von wxPython *immer* Unicode zurück, wenn du einen Text anforderst.

Die Anweisung ``wx.SetDefaultPyEncoding("UTF-8")`` zeigt wxPython auf, dass immer dann, wenn es kein Unicode von dir bekommt, es sich um einen Bytestring im UTF-8 Encoding handelt und wandelt es intern wieder nach Unicode um. Das ist sozusagen eine Notfallmaßnahme, falls du vergisst, wxPython mit Unicode zu füttern.

Kümmere dich darum, dass wxPython von dir immer Unicode bekommt und verlasse dich darauf, dass du von wxPython immer Unicode zurück bekommst, wenn die Unicode-Version installiert ist. Das ist zumindest bei Ubuntu der Fall und sollte auch bei Windows ab Windows NT installiert werden. Die Ansi-Version von wxPython ist nur für Win95/98/ME gedacht, da diese mit Unicode nicht so gut klar kommen.

Bitte nicht schlagen, wenn ich es nicht klar rüber gebracht habe. :roll: ;-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Donnerstag 2. August 2007, 21:29

Ich habe WindozeVista und auch die Unicode-Version von allem. Also daran wird es nicht liegen.

Ich habe den Fehler beim Versuch bekommen, mit zlib.compress einen String zu komprimieren, da er einen ASCII-String annimmt :K . Wenn ich zlib.compress(string.encode("UTF-8")) mache, geht es...

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]