Gå til innhold

æøå i Tkinter (entry.get())


Anbefalte innlegg

Jeg har laget et program i Python 2.7, med Tkinter gui.

 

Jeg har lagret UTF-8 koding lokalt i fila, og den kan printe alle karakterer fint.

 

Problemet oppstår i min entryvariabel (StringVar), når jeg henter inn æ, ø eller å.

Når jeg skal kjøre en funksjon, funk(entryvariabel.get()) leser den av unikodekoden, som jo blir helt på trynet. Jeg vil den skal lese inn feks 'kø'.

 

Noen som har peiling? Dette er erroren jeg får:

 

Warning (from warnings module):
 File "C:\pythonprog\scrabble\feud.py", line 46
   if s not in liste and s in ordliste:
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Exception in Tkinter callback
Traceback (most recent call last):
 File "C:\Python\lib\lib-tk\Tkinter.py", line 1410, in __call__
   return self.func(*args)
 File "C:\pythonprog\scrabble\feud.py", line 19, in siord
   if len(ordene) == 0:
NameError: global name 'ordene' is not defined

 

Se bort i fra NameError o.l, UniCodeWarning jeg ikke forstår.

 

Takk

Lenke til kommentar
Videoannonse
Annonse

vel hvis du tar utgangspunkt i stacktrace'en fra python

 

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

 

og

 

   if len(ordene) == 0:
NameError: global name 'ordene' is not defined

 

Så er det jo ganske klart hvor problemet ligger

Lenke til kommentar

Jeg har prøvd frem og tilbake med encoding, tror ikke jeg helt forstår det..

Hvis ordinn.get() er definert som en StringVar i entryboks, endret til "køl*e",

 

Jeg tester dette i shellet mitt.

 

ordinn = StringVar(None)
tekstboks = Entry(root, textvariable = ordinn)

 

 

>>> ordinn.get()
u'k\xf8l*e'
>>> print ordinn.get()
køl*e
>>> ordinn.get().encode('utf-8')
'k\xc3\xb8l*e'
>>> print ordinn.get().encode('utf-8')
køl*e

Endret av martol1ni
Lenke til kommentar

Da får jeg ut cp1252. Når jeg prøver å skrive f. eks,

s = 'kø*le'.encode('utf-8')

får jeg erroren igjen..

Traceback (most recent call last):
 File "<pyshell#38>", line 1, in <module>
   s = 'kø*le'.encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf8 in position 1: ordinal not in range(128)

Endret av martol1ni
Lenke til kommentar

Det skjer fordi når terminalen din er satt til cp1252-encoding så vil en strengen 'kø*le' være cp1252-encodet.

 

Når du kjører:

s = 'kø*le'.encode('utf-8')

vil python først prøve å decode strengen til unicode med default codec 'ascii', men det feiler fordi ascii støtter ikke 'ø'.

 

For at det skal funke må du først decode strengen til unicode med riktig codec (cp1252) før du encoder den til utf-8:

s = 'kø*le'.decode('cp1252').encode('utf-8')

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...