Seite 1 von 1

Python2/3 kompatiblen Code in Bezug auf Unicode schreiben

Verfasst: Freitag 23. März 2012, 21:30
von OTB
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()

Re: Python2/3 kompatiblen Code in Bezug auf Unicode schreibe

Verfasst: Samstag 24. März 2012, 11:35
von lunar
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.

Re: Python2/3 kompatiblen Code in Bezug auf Unicode schreibe

Verfasst: Samstag 24. März 2012, 17:56
von OTB
Super, so einfach ist das also, vielen Dank!