这是this question的完全重复;但是,在接受的答案中链接的代码将近11年,代码中的这条评论会导致我的重复问题:
keyym - >希望UTF-8转换有一天会提供 Xlib通过XmbLookupString(),理想情况下不必在X中完成 应用。但我们还没有。
我们在吗?我知道XwcLookupString
,但有点像......
wchar_t unicode = XKeySymToWideChar( keysym );
...会更加简单和合乎逻辑,并且无论何时添加或更改KeySyms都不需要更新。
X11 / Xlib中是否有一个简单的函数可以将KeySym映射到它的Unicode等价物?
答案 0 :(得分:5)
尝试此node.js模块生成C表:https://github.com/substack/node-keysym。 它基于此数据集:https://github.com/substack/node-keysym/blob/master/data/keysyms.txt
答案 1 :(得分:1)
X11 / Xlib中是否有一个简单的函数可以将KeySym映射到它 Unicode等价?
因为Unicode是在Xlib之后多年发明的,而且没有人去过 回来添加这样的东西?大多数Xlib API都是代码集 独立,因为它是在每个语言环境使用的日子里写的 不同的字符集(ISO 8859- *,Big5,JIS等),所以你得到一个 适合当前语言环境的char缓冲区。有一些UTF-8 在以后的几年里,特别是我们一直试图让它们增加 从那以后,Xlib安静地休息,将新的API设计推向了xcb 代替。
答案 2 :(得分:0)
这可能有助于某人...改编自xmodmap源和在线文档(http://tronche.com/gui/x/xlib/utilities/keyboard/XKeycodeToKeysym.html)
KeySym ks = XKeycodeToKeysym(dpy, keycode+min_keycode, modifier);
const char *s;
if (ks != NoSymbol)
s = XKeysymToString (ks);
else {
printf("Keycode has no symbol. Ignored.\n");
return NULL;
}
printf ("0x%04x (%s)\n", (unsigned int)ks, s);
printf ("wide char:%lc\n", (wchar_t)ks);
Keysym已经是UTF值了。问题是如何设置关键组合......'á'。
答案 3 :(得分:0)
接受的答案不正确,建议的源代码也不是标准且可靠的方法。由于键盘布局超出了最初的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)
是您需要的功能。 utf-8版本在内部使用utf-32,但是您可以使用所需的一种。