Python2/3 kompatiblen Code in Bezug auf Unicode schreiben

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
OTB
User
Beiträge: 15
Registriert: Samstag 24. März 2007, 17:54

Freitag 23. März 2012, 21:30

Hallo,
ich kann mich zur Zeit nicht endgültig entscheiden, mein Gui-Programm mit python2 und Tkinter,
oder es in python3 mit tkinter zu schreiben, deswegen versuche ich python2/python3 kompatiblen
Code zu schreiben. Das Programm ist relativ einfach, aber sehr umfangreich
Wichtig ist die Mehrsprachigkeit, die ich wie im Code-Beispiel
umsetzen möchte. Diesen Code-Schnipsel habe ich als kleinen Test geschrieben, weil ich
unter python2 in meinem Programm einen Unicode-Error hatte, den ich nicht nachvollziehen konnte.
('в' + '°') erzeugt den Fehler, tausche ich das russische в gegen ein beliebiges anderes Zeichen,
funktioniert das Programm wieder ohne Unicode Fehler?!). Im folgenden Code-Beispiel klappt es aber,
das hat mich verwirrt und ich frage mich ob ich nach so einem einfachen Muster wie im Code
Beispiel Kompatiblität in Bezug auf Unicode zwischen python2/3 herstellen kann?
Tkinter soll mit Unicode ja keine Schwächen haben!?.

Beispiel (läuft mit Python 2.6.5/3.1.2)

Code: Alles auswählen


# -*- coding: utf-8 -*-
# ^^^ bedeutet das coding, das alle strings in der datei als utf-8 strings 
# in python2.6 umgesetzt werden?


try:
    import Tkinter as tk
except:
    import tkinter as tk



language = 'russian'

text = {
    'english'       : 'house',
    'russian'       : 'дом',
    'chinese'       : '房子'
}


def concat():
    var.set(text[language]+'üäö房子'+str(21*2)+'MIX в '+'°') 


root = tk.Tk()
var = tk.StringVar()
var.set(text[language])
label = tk.Label(root,font=(None,32),textvariable=var)
button = tk.Button(root,command=concat)
button.pack()
label.pack()
root.mainloop()
lunar

Samstag 24. März 2012, 11:35

Setze an den Anfang Deines Quelltexts "from __future__ import unicode_literals". Unter Python 3 wird diese Anweisung einfach ignoriert, unter Python 2 sorgt diese Anweisung dafür, dass alle Zeichenketten in einfachen oder doppelten Anführungszeichen als "unicode"-Objekte und nicht als "str" erzeugt werden. Damit verhält sich der Quelltext im Bezug auf unicode identisch unter Python 2 und 3.
OTB
User
Beiträge: 15
Registriert: Samstag 24. März 2007, 17:54

Samstag 24. März 2012, 17:56

Super, so einfach ist das also, vielen Dank!
Antworten