如何将X11 KeySym映射到Unicode字符?

x-x*_*x-x 5 x11 unicode input keyboard-layout xorg

这与这个问题完全相同; 但是,在接受的答案中链接的代码将近11年,代码中的这条评论会导致我的重复问题:

希望有一天由Xlib通过XmbLookupString()提供keysym - > UTF-8转换,理想情况下不必在X应用程序中完成.但我们还没有.

我们到了吗?我知道XwcLookupString,但有点......

wchar_t unicode = XKeySymToWideChar( keysym );
Run Code Online (Sandbox Code Playgroud)

...会更加简单和合理,并且无论何时添加或更改KeySyms都不需要更新.

X11/Xlib中是否有一个简单的函数可以将KeySym映射到它的Unicode等价物?

Ara*_*emi 6

接受的答案不正确,建议的源代码也不是标准且可靠的方法。由于键盘布局超出了最初的 X11 范围,因此添加内容在 xkb 中实现,即“X 键盘扩展”,大约于 1996 年添加,并且已经存在很长时间了。

XKB_EXPORT uint32_t
xkb_keysym_to_utf32(xkb_keysym_t keysym)

XKB_EXPORT int
xkb_keysym_to_utf8(xkb_keysym_t keysym, char *buffer, size_t size)
Run Code Online (Sandbox Code Playgroud)

是您需要的功能。utf-8版本内部使用utf-32版本,但是你使用你需要的版本。


x-x*_*x-x 3

X11/Xlib 中是否有一个简单的函数可以将 KeySym 映射到其 Unicode 等效项?

最终的答案是否定的

因为 Unicode 是在 Xlib 之后几年发明的,并且没有人回去添加这样的东西?大多数 Xlib API 都是独立于代码集的,因为它是在每个语言环境使用不同字符集(ISO 8859-*、Big5、JIS 等)的时代编写的,因此您可以获得适合当前语言环境的字符缓冲区。后来几年添加了一些特定于 UTF-8 的内容,但从那时起我们一直试图让 Xlib 安息,转而将新的 API 设计推向 xcb。