将 UTF-32 字符打印到终端
Printing a UTF-32 character to terminal
我正在根据此页面使用回调(使用 glfwSetCharCallback 设置)从 GLFW 读取用户输入:
http://www.glfw.org/docs/latest/input.html#input_char
回调函数接收按下的键作为 32 位无符号整数。如何将其转换为可以在屏幕上打印的内容?我已经尝试了 C++11 的 codecvt 和 ICU 库,但无法将可读字符打印到我的终端。
这是我的回调函数的代码:
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;
}
如果我对输入(键)不做任何操作,则根本不会显示任何内容。只是一个空行。
您正在调用 ucnv_toUChars(),它将 8 位字符串转换为 Unicode。但是你需要走另一条路,将你的 Unicode 字符串转换为 8 位,例如 UTF-8。我会使用 UnicodeString class,它有一个采用 UTF-32 的构造函数和一个方法 toUTF8String().
我正在根据此页面使用回调(使用 glfwSetCharCallback 设置)从 GLFW 读取用户输入: http://www.glfw.org/docs/latest/input.html#input_char
回调函数接收按下的键作为 32 位无符号整数。如何将其转换为可以在屏幕上打印的内容?我已经尝试了 C++11 的 codecvt 和 ICU 库,但无法将可读字符打印到我的终端。
这是我的回调函数的代码:
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;
}
如果我对输入(键)不做任何操作,则根本不会显示任何内容。只是一个空行。
您正在调用 ucnv_toUChars(),它将 8 位字符串转换为 Unicode。但是你需要走另一条路,将你的 Unicode 字符串转换为 8 位,例如 UTF-8。我会使用 UnicodeString class,它有一个采用 UTF-32 的构造函数和一个方法 toUTF8String().