SDL_ttfライブラリによって提供されるTTF_RenderUTF8_Blended
メソッドを使用して文字をレンダリングしようとしています。私はユーザー入力(キーボード)を実装し、 'ä'や 'ß'を押すと正常に動作します。これらはドイツ語の特殊文字です。この場合、それらは拡張ASCII 8ビットコードでさえありますが、たとえばギリシャ文字をコピーして貼り付ける場合でも、フォントはUTF8を使って正しくレンダリングされます。 (ただし、すべてここで見つけることができるUNICODEグリフ(http://unicode-table.com/)は、私がテスト中に認識したようにレンダリングできますが、Arialフォントにはすべての単一グリフがない可能性があるためです。 )SDL_ttfでUTF8でレンダリングするフォント
私の問題は文字列(パラメータとしてconst char*
)を(ASCIIに)追加文字が正しくレンダリングされないということです。だから、実行時にキーボードで 'Ä'、 'ß'などのUNICODE文字をキーボードで入力しますが、これをパラメータとして渡して、ゲームのタイトルを言うと、このようなコードでは機能しません。
font_srf = TTF_RenderUTF8_Blended(font, "Hällö", font_clr);
なぜこれが起こっているのか分かりません。私は、画面上で取得することです:
H_ll_
そして私は導入の面白い方法として使用される次のスピーチをした男の典型的な縦長の長方形表現するために_使用しています: https://www.youtube.com/watch?v=MW884pluTw8
皮肉なことに、私はTTF_RenderText_Blended(フォント、 "Hällö"、font_clr)を使用します。それは 'ä'と 'ö'が8ビット拡張ASCIIエンコードであるために機能しますが、私が望むのはユニコードサポートなので、それは役に立ちません。
編集&セミソリューション
私の入力が正常に動作しますので、私は一種の(本当に良いではない)、問題を修正し、私はちょうど '、私は「A」を押したとき、私は、入力として何を得る値の確認ß」、...私のキーボードの上に次のコードを使用して:
const char* c = input.c_str();
for (int i = 0; i < input.length(); i++)
{
std::cout << int(c[i]) << " ";
}
をそれから私は、次のようにこれらの文字を印刷:
const char char_array[] = {-61, -74, -61, -97, '\0'};
const char* char_pointer = char_array;
-61、-74は 'ö'と-61、-97は 'ß'です。 これはUTF8エンコーディングに適していますか?
- U + 00F6 | ö| (UTF8データテーブルから)C3のB6 B6
のconst char型char_array [] = {0xC3、0xB6}であるC3
と256から74 = 182である
- 256から61 = 195。
このコードは、あなたが疑問に思っていた場合にも問題なく動作します。そして私はこれが私が今やっていることだと思います。いくつかのUnicodeグリフのための16進コードを調べることはそれほど難しくありません。
しかし、私はまだ分かりませんが、拡張ASCIIの整数値246に到達する方法です。加えて、私の問題に人間に優しい解決策はありませんか?
あなたがC++ 11コンパイラを持っていますか? (http://en.cppreference.com/w/cpp/language/string_literal)[ 'u8'文字列リテラル]を試してみてください。 – genpfault
私はわからないが、私のコンパイラは接頭辞としてU8を許可していないので、私はそうは思いません。 (どうやってそれを理解するのですか?) IDEとして、Microsoft Visual Studio 2012 Expressを使用します。私は私の元には、いくつかのUnicodeグリフを持っていたとき – huzzm