Seite 1 von 1

Unicode Combine

Verfasst: Mittwoch 24. Januar 2007, 19:17
von name
Hab ein kleines Problem mit Unicode, ich mag den Buchstaben self.lastfocus[-1].GetValue()[:-1] mit dem Akzent event.GetEventObject().GetLabel() verbinden, das Problem ist das er mir immer folgende Fehlermeldung ausspuckt:
File "wxinterface.py", line 94
comb = u"\N{%s}" % combining
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 0-5: unknown Unicode character name

Code: Alles auswählen

	def CombineChars(self, event):
		# event.GetEventObject().GetLabel() = "ˊ"
		combining = (unicodedata.name(event.GetEventObject().GetLabel())).replace("MODIFIER","COMBINING")
		comb = u"\N{%s}" % combining
		tocombine = self.lastfocus[-1].GetValue()[-1]+comb
		combined = unicodedata.normalize('NFC',tocombine)
		# wxPython stuff
		self.lastfocus[-1].SetValue("%s%s" % (
											  self.lastfocus[-1].GetValue()[:-1],
											  combined
											  )
		)
		self.lastfocus[-1].SetFocus()
		self.lastfocus[-1].SetInsertionPoint(self.lastfocus[-1].GetLastPosition())
Danke fuers lesen!

Verfasst: Mittwoch 24. Januar 2007, 19:55
von BlackJack
Das klappt nicht weil Escapesequenzen in Zeichenkettenliteralen zur Übersetzungszeit ausgewertet werden. Das sind Konstanten. Und u'\N{%s}' ist falsch, weil '%s' kein Name für ein Unicode-Zeichen ist.

Du brauchst die `lookup()`-Funktion aus dem `unicodedata`-Modul. Die ist das Gegenstück zu `name()`.

Verfasst: Mittwoch 24. Januar 2007, 19:56
von name
BlackJack hat geschrieben:Das klappt nicht weil Escapesequenzen in Zeichenkettenliteralen zur Übersetzungszeit ausgewertet werden. Das sind Konstanten. Und u'\N{%s}' ist falsch, weil '%s' kein Name für ein Unicode-Zeichen ist.

Du brauchst die `lookup()`-Funktion aus dem `unicodedata`-Modul. Die ist das Gegenstück zu `name()`.
Aber das moechte ich doch net, wenn ich es hardcode muss ich es doch auch mit {FOO BAR} schreiben...
Mag mich and dieser Stelle auch mal fuer die kompetente Hilfe hier bedanken!