2013-10-05 15 views
5

FLTK 1.3.2 documentationによると:FLTKでUnicodeを表示するには?

Unicodeのサポートはごく最近FLTKに加えて、まだ 不完全であるました。しかし

、次はおそらく実装されています:

  • 提供:

    Unicodeと UTF-8 FLTKでの最初の実装は、3つの重要な領域を含むことに注意することが重要ですUnicode文字テーブルといくつかの単純な関連関数

  • char *変数と関数パラメータの文字単位の1バイトからの変換ion to UTF-8可変長
  • ASCIIまたは Latin1文字の代わりに一般的なUnicode文字またはUCSコード番号を受け入れるための表示フォントインターフェイスの変更。

私の質問は、どのように私は実際に私のFLTKコントロール上でUnicodeを表示するのですか?私はUnicodeを受け入れるウィジェット関数を見つけることができません。

void Fl_Widget::label ( const char * text )

答えて

5

あなたが投稿のリンクから:

FLTKは完全にUTF-8エンコーディングを使ってUnicodeに変換されますたとえば、これはlabel関数のシグネチャです。基本となるオペレーティングシステムによって異なるエンコーディングが必要な場合、FLTKは必要に応じて文字列を変換します。

あなたがリストする3つの箇条書きは、Unicodeサポートの実装を構成する領域です。つまり、これは自分がやっていること、またはこれからやる予定のことです。

  • FLTKの実装は、Unicode文字テーブルと
  • FLTKの実装は、UTF-8にSBCSを使用してからのchar *変数や関数のパラメータを変換しようとしているいくつかの単純な関連機能を提供しようとしています。つまり、char *文字列をUTF-8として扱うFLTK関数と変数を再実装しようとしています。
  • FLTKの実装者は、ASCIIおよびLatin1文字以上の文字をカバーするように表示フォントインターフェイスを変更します。

私の質問は、どのように私は実際に私のFLTKコントロール上でUnicodeを表示するのですか?私はUnicodeを受け入れるウィジェット関数を見つけることができません。たとえば、これはラベル関数のシグネチャである:

void Fl_Widget::label (const char * text) 

間違って2バイト文字を使用するエンコーディングを意味する「ユニコード」を使用する多くの人々があります。あなたがリンクしているFLTKのドキュメントは、間違いではありません。これを理解すると、ドキュメントでは、上記のシグネチャでUnicodeをどのように使用するかがはっきりと示されています。UTF-8エンコーディングを使用してUnicodeデータをchar *文字列として渡します。たとえば、あなたが実行エンコーディングとしてUTF-8を使用して、コンパイラ使用している場合:

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

それとも、C++ 11コンパイラがある場合:

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

注最後のビットが必要であることをコンパイラは文字列リテラルを含むソースファイルのエンコーディングを理解します。 – rubenvb

+1

ありがとうございます。あなたの答えを見て、私は[Unicodeについて自分自身を教える](http://www.joelonsoftware.com/articles/Unicode.html)に時間を割いた。 – JBentley

+0

@rubenvb:はい、それ以上:最後の例の次の例では、コンパイラは、その狭い実行文字セット*としてUTF-8をサポートしなければなりません。 Visual C++はサポートしていません。最後の例では、コンパイラはC++ 11の 'u8'リテラルプレフィックスをサポートする必要があります。 Visual C++にはありません。要するに、それらは**不可能な**例です。ワイド文字列リテラルは移植可能ですが、実行時にUTF-8に変換する必要があります。 –

関連する問題