2016-09-07 8 views
0

私は(glfwSetCharCallbackを使用して設定)このページによると、コールバックを使用してGLFWからのユーザ入力を読んでいるにUTF-32文字の印刷int。これを私の画面に印刷できるものに変換するにはどうすればいいですか?私はC++ 11とICUライブラリの両方からcodecvtを試しましたが、私の端末に読み込み可能な文字を印刷することはできませんでした。ターミナル

これは私のコールバック関数のコードです:私は入力(キー)に何もしない場合

void InputManager::charInputCallback(GLFWwindow* window, unsigned int key) 
    { 
     UErrorCode errorStatus = U_ZERO_ERROR; //initialize to no error 
     UConverter *utf32toUnicode = ucnv_open("UTF-32", &errorStatus); //create converter utf-32 <=> Unicode 
     if(U_FAILURE(errorStatus)) 
      std::cout << u_errorName(errorStatus) << std::endl; 
     UChar unicode[10] = {0}; 
     ucnv_toUChars(utf32toUnicode, unicode, 10, (char*)key, 4, &errorStatus); // this fails with an U_ILLEGAL_ARGUMENT_ERROR 
     if(U_FAILURE(errorStatus)) 
      std::cout << u_errorName(errorStatus) << std::endl; 

     std::cout << unicode << std::endl; 
    } 

、何も全く示されていないです。ただの空白行。

+5

問題の文字は何ですか?どのような変換を試みましたか?どのオペレーティングシステムを使用していますか? – bmargulies

+0

私が探している文字は、実際の文字です(関数を覚えていない限り)。つまり、キーボードの 'e'を押すと、文字 'e'がコールバックメソッドに送信されます。私が言ったように:私はcodecvt(この例のコードhttp://en.cppreference.com/w/cpp/locale/codecvtから)を試して、ICUライブラリを使用しています。 ICUでは、2つのコンバータの作成を試みました。 1つはUTF-32からUnicodeへ、そして最後はUnicodeからUTF-8への変換です。しかし、ucnv_toUCharsはchar *を入力として取り、明示的にunsigned intを型キャストしても機能しませんでした。私はあなたが私にしたい場合は、削除されたコードを再作成することができます。 –

+0

また、Linuxを使用しています。 –

答えて

0

あなたは8ビット文字列をUnicodeに変換するucnv_toUChars()を呼び出しています。しかし、あなたは逆にして、Unicode文字列を8ビット(UTF-8など)に変換する必要があります。 UTF-32を使用するコンストラクタとtoUTF8String()メソッドを持つUnicodeStringクラスを使用します。

+0

うん、そうだよ。どうもありがとうございました! –

関連する問題