2017-03-01 7 views
0

プログラミング言語:C++、レンダラー:GLStudio。私はのようにUnicode文字'GREEK CAPITAL LETTER DELTA' (U+0394)をレンダリングしたいUnicode文字「GREEK CAPITAL LETTER DELTA」は、C++およびGLStudioで「白い垂直矩形」としてレンダリングされます

ΔP

コードは次のとおりです。

sprintf(somebuffer,"%cP",'\u0394'); 

結果は以下のように白い縦長の長方形」(U + 25AF)ですが:

▯P 

私が使用した参考資料は次のとおりです。http://www.fileformat.info/info/unicode/char/25af/index.htm

レンダラにはUnicodeマッピングの問題がありますが、それを正確に突き止めることはできませんでしたので、回避策として実際のOpenGL三角形を描画する前に、自分の可能性を試してみたかったのです。どんな助けや提案も大歓迎です!

+3

C++の 'char'は1バイトです。'%c'は 'char'を渡していると言います。 – chris

+0

@chris:それはとても良い点です。私はそれを文字列としてレンダリングしようとしました。それから、まったく異なるユニコード文字を与えました。 –

+1

あなたは '%c'を使用しました。これは' sprint'が単一の 'char'値のプレースホルダです。あなたは '\ u394'を渡しています。ほとんどのC++実装では、シングルバイトではなく、つまり' char'型ではありません。必要なことは、関連するGLStudio関数が必要とするものによって異なります。広い文字列が必要な場合は、それを渡します。 UTF-8でエンコードされた狭い文字列が必要な場合は、それを渡します。 –

答えて

2

これは、レンダラーが期待するエンコードに完全に依存します。

sprintf(somebuffer, u8"\u0394P"); 

これは、UTF-8でエンコードされた文字列<capital delta><P>を形成し、(サイズをチェックしたりstrncpyなどのより適切なC関数を使用せずに)バッファに書き込む:それはUTF-8を期待するか、サポートの良いチャンスがあります。レンダラーは、これらのバイトを受け取り、それらをレンダリングすることができます。現在何が起こっている

は非常に高いcharを期待%cプレースホルダの代わりにint引数を渡すことです。私は、未定義の振る舞いは、最初のバイトを取り、それをcharとして扱っていると思います。

関連する問題