私は(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;
}
、何も全く示されていないです。ただの空白行。
問題の文字は何ですか?どのような変換を試みましたか?どのオペレーティングシステムを使用していますか? – bmargulies
私が探している文字は、実際の文字です(関数を覚えていない限り)。つまり、キーボードの '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を型キャストしても機能しませんでした。私はあなたが私にしたい場合は、削除されたコードを再作成することができます。 –
また、Linuxを使用しています。 –