2013-10-05 8 views
5

Nach dem FLTK 1.3.2 documentation:Wie wird Unicode mit FLTK angezeigt?

Unicode-Unterstützung erst vor kurzem zu FLTK hinzugefügt wurde und noch unvollständig ist.

Allerdings sind die folgenden angeblich umgesetzt:

Es ist wichtig, dass die anfängliche Implementierung von Unicode und UTF-8 in FLTK drei beinhaltet wichtige Bereiche zu beachten ist:

  • Bereitstellung von Unicode-Zeichentabellen und einigen einfachen verwandten Funktionen
  • Konvertierung von char * Variablen und Funktionsparameter von einem Byte pro Zeichen Repräsentant ION nach UTF-8 variabler Länge Sequenzen
  • Änderungen an der Anzeige Schriftart-Schnittstelle, um allgemeine Unicode-Zeichen oder UCS-Codenummern statt nur ASCII oder Latin1 Zeichen zu akzeptieren.

Meine Frage ist, wie kann ich Unicode tatsächlich auf meine FLTK Kontrollen angezeigt werden? Ich kann keine Widget-Funktionen finden, die Unicode akzeptieren. Zum Beispiel ist dies die Signatur für die label Funktion:

void Fl_Widget::label ( const char * text )

Antwort

5

Von den Link Sie auf dem Laufenden:

FLTK wird vollständig in Unicode konvertiert werden UTF-8-Codierung. Wenn vom zugrunde liegenden Betriebssystem eine andere Kodierung benötigt wird, konvertiert FLTK die Zeichenfolge nach Bedarf.

Die drei Aufzählungszeichen, die Sie aufführen, sind die Bereiche, die die Implementierung der Unicode-Unterstützung ausmachen. Das sind Dinge, die sie tun oder tun wollen.

  • FLTK Implementierer werden Unicode-Zeichentabellen und einige einfache verwandte Funktionen
  • FLTK Implementierer von char * Variablen und Funktionsparameter konvertieren gehen liefern SBCS auf UTF-8 verwenden. (Das heißt, sie werden FLTK-Funktionen und -Variablen neu implementieren, um char * -Strings als UTF-8 zu behandeln.)
  • FLTK-Implementierer werden die Anzeige-Font-Schnittstelle ändern, um mehr als nur ASCII- und Latin1-Zeichen abzudecken.

Meine Frage ist, wie kann ich Unicode tatsächlich auf meine FLTK Kontrollen angezeigt werden? Ich kann keine Widget-Funktionen finden, die Unicode akzeptieren. Zum Beispiel ist dies die Signatur für das Label Funktion:

void Fl_Widget::label (const char * text) 

Es gibt viele Leute, die ‚Unicode‘ fälschlicherweise eine Codierung verwenden bedeuten, die 2-Byte-Zeichen verwendet. Die FLTK-Dokumentation, auf die Sie verlinken, macht diesen Fehler nicht.Wenn Sie dies verstehen, wird in der Dokumentation deutlich gesagt, wie Sie Unicode mit der obigen Signatur verwenden: Sie übergeben die Unicode-Daten als char * -String mit der UTF-8-Codierung. Zum Beispiel, wenn Sie mit einem Compiler, der UTF-8 als Ausführungs Codierung verwendet:

widget.label("кошка 日本国"); 

Oder wenn Sie einen C++ 11-Compiler:

widget.label(u8"кошка 日本国"); 
+0

Beachten Sie, dass die letzten Bits erfordern die Compiler, um die Codierung der Quelldatei zu verstehen, die das String-Literal enthält. – rubenvb

+1

Danke. Angesichts Ihrer Antwort habe ich mir die Zeit genommen, [über Unicode zu unterrichten] (http://www.joelonsoftware.com/articles/Unicode.html). – JBentley

+0

@rubenvb: Ja, und mehr als das: Für das vorletzte Beispiel muss der Compiler * UTF-8 als seinen schmalen Ausführungszeichensatz * unterstützen, und z.B. Visual C++ nicht, und für das letzte Beispiel muss der Compiler das C++ 11 'u8'-Literalpräfix unterstützen und z. Visual C++ nicht. Kurz gesagt, das sind ** unportable ** Beispiele. Breite String-Literale sind portabel, müssen jedoch zur Laufzeit in UTF-8 konvertiert werden. –

Verwandte Themen