2016-06-01 10 views
1

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に到達する方法です。加えて、私の問題に人間に優しい解決策はありませんか?

+1

あなたがC++ 11コンパイラを持っていますか? (http://en.cppreference.com/w/cpp/language/string_literal)[ 'u8'文字列リテラル]を試してみてください。 – genpfault

+0

私はわからないが、私のコンパイラは接頭辞としてU8を許可していないので、私はそうは思いません。 (どうやってそれを理解するのですか?) IDEとして、Microsoft Visual Studio 2012 Expressを使用します。私は私の元には、いくつかのUnicodeグリフを持っていたとき – huzzm

答えて

1

ソースファイルにASCII以外の文字が含まれている場合、そのソースコードファイルの文字エンコーディングは重要です。そのため、テキストエディタやIDEでは、保存時に文字セット(UTF-8など)を設定する必要があります。

また、あなたは、\ xを使用することができます...またはuは....形式は、ASCII文字のみを使用して、非ASCII文字を指定するには、\、そのソースファイルのエンコーディングは重要ではありません。

マイクロソフトのドキュメントではなく、MS-固有:

https://msdn.microsoft.com/en-us/library/6aw8xdf2.aspx

+0

をファイルIDEは「?あなたのデータを維持するために、Unicodeとしてこのファイルを再保存しますか」私に尋ねた、と私ははい、そう私のソースコードが正しくエンコードされるべきか、私は言いましたこれが間違っている? – huzzm

+0

代わりに文字列に\ u .... char定数を使ってみてください。それからあなたはあなたが何を通過しているかを正確に知っているそれがうまくいく場合は、ソースファイルのエンコーディングを調べてください。あなたが思っているものを渡していない可能性があります。デバッガとブレークポイントを使用して、渡されるchar *のバイトを調べます。ソースファイル内のバイトを調べるには、16進エディタを使用します(または、rawファイルとしてファイルを開くことができる場合はIDE)。 –

+0

ユニコードの6または8種類、あなたのエディタが中に保存されている可能性があります。UTF-7、UTF-8、UTF-16、UCS-2、およびその他、BOM(バイトオーダーマーク)の有無にかかわらず。あなたの編集者はどれを保存しましたか?私は1つの私のエディタが保存されているかわからない – gman

関連する問題