2016-07-12 17 views
0

Ich versuche, die Bezeichnung eines GUI-Elements auf einen griechischen Buchstaben mit Python anzuzeigen.Python: Bestimmte Unicode-Zeichen werden nicht korrekt angezeigt

str(u'\u0054'.encode('utf8')) wird das Unicode-Zeichen 'T' richtig produzieren, als Unicode-Nummer 0054.

Schreiben str(u'\u03B6'.encode('utf8')) Anzeige nicht den griechischen Buchstaben klein zeta ist stattdessen aber this Sache.

versuchte ich str(u'\uceb6'.encode('utf8')) auch (CeB6 ist die utf-8-Codierung des Zeichens ich will), bekam aber ein ähnliches, seltsam aussehenden Zeichen schreiben, die sicherlich nicht der griechische Buchstaben zeta war.

Nach this Website ist das Zeichen in gängigen Schriftarten verfügbar.

Könnte es sein, dass das GUI-Toolkit eine seltsame Schriftart verwendet? Ich benutze das FOX-Toolkit.

Jede Hilfe wird geschätzt.

EDIT: Ich versuche speziell, ein Textlabel FXLabel(parent, string) zu erstellen, wo ich die Zeichenfolge str(u'\u03B6'.encode('utf8')) liefern. Und wie erwähnt, wird das Liefern des Strings mit der Unicode-Nummer des Kapitals t das erwartete Label erzeugen.

+0

Das Zeichen 'T', kodiert als UTF8-String, sieht folgendermaßen aus:' T'. Das Zeichen "ζ" als UTF8-Zeichenfolge lautet jedoch "ζ", dh die Zeichen "0xCE" und "0xB6" in einer beliebigen Codepage (diese ist Latin-1). Was Sie bekommen haben, liegt nicht in der Kodierung, sondern in dem, was Ihre Bibliothek erwartet. – usr2564301

+0

.. Übrigens ist Ihr Zitat "verfügbar in den meisten Schriftarten" weit entfernt von dem, was eigentlich gesagt wird: "Unterstützt in allen gängigen Schriftarten". Die "üblichen Schriftarten" unter dieser Anmerkung sind die sogenannten "websicheren Schriftarten", "die wahrscheinlich auf einer Vielzahl von Computersystemen vorhanden sind" (https://en.wikipedia.org/wiki/Web_typography#Web-safe_fonts)). Es sei denn, Sie haben nicht viele Schriftarten, dies ist eine ** sehr kleine Untergruppe der meisten Schriftarten. – usr2564301

+0

@RadLexus Danke, also sollte ich herausfinden, welche Zahlen dem Zeichen entsprechen, das ich in Latin-1 haben möchte? Ich finde es nur komisch, dass es die Kodierung von T als ein einzelnes Zeichen interpretiert, während es im zweiten Fall in zwei Teile zerlegt wird. Oh, und ich habe meine Frage bearbeitet :) – DjungelJarl

Antwort

0

Ihre Ausgabekodierung ist falsch. Stellen Sie sicher, dass Ihr Terminal korrekt für die UTF-8-Ausgabe konfiguriert ist.

Wenn ich Ihr (ziemlich matschiges) Bild richtig interpretiere, wird CE B6 als angezeigt, was mit einem der üblichen westlichen 8-bit encodings übereinstimmt.

+0

Ja, das sind die Zeichen, die ausgegeben werden. Was meinst du mit der Konfiguration meines Terminals für die UTF-8-Ausgabe? Was den von Ihnen angegebenen Link angeht, bin ich mir nicht ganz sicher, was ich sehe. Woher weiß ich, welche Lokalisierung verwendet werden soll und warum interpretiert Python meine Unicode-Nummer als zwei Zeichen mit jeweils zwei hexadezimalen Zahlen anstelle eines Zeichens mit vier hexadezimalen Zahlen? – DjungelJarl

+1

UTF-8 codiert dieses Zeichen als zwei Bytes.Sie müssen Ihre Umgebung konfigurieren (im Grunde das Programm, von dem aus Sie Python ausführen), um diese Ausgabe korrekt zu interpretieren. Dies ist eine häufige FAQ. Sie sollten leicht Anweisungen für Ihre Umgebung finden, aber Ihre Frage fehlt die Details, um Ihnen etwas Spezifisches zu sagen. – tripleee