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

如何将X11 KeySym映射到Unicode字符?,unicode,input,x11,xorg,keyboard-layout,Unicode,Input,X11,Xorg,Keyboard Layout,这是一个精确的副本;然而,被接受的答案中所链接的代码已经有将近11年的历史了,代码中的这一评论引出了我重复的问题: keysym->UTF-8转换有望有一天由 通过XmbLookupString()执行Xlib,理想情况下不必在X中执行 应用。但我们还没有做到 我们到了吗?我知道XwcLookupString,但类似于 wchar_t unicode = XKeySymToWideChar( keysym ); 。。。将更简单、更符合逻辑,并且不需要在添加或更改键符号时进行更新 X11/Xli

这是一个精确的副本;然而,被接受的答案中所链接的代码已经有将近11年的历史了,代码中的这一评论引出了我重复的问题:

keysym->UTF-8转换有望有一天由 通过XmbLookupString()执行Xlib,理想情况下不必在X中执行 应用。但我们还没有做到

我们到了吗?我知道
XwcLookupString
,但类似于

wchar_t unicode = XKeySymToWideChar( keysym );
。。。将更简单、更符合逻辑,并且不需要在添加或更改键符号时进行更新


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

尝试使用此node.js模块生成C表:。 它基于以下数据集:

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

因为Unicode是在Xlib之后几年发明的,从来没有人使用过 回去加这样的东西?大多数Xlib API都是代码集 独立,因为它是在每个语言环境都使用 不同的字符集(ISO 8859-*、Big5、JIS等),因此您可以获得 适合于当前语言环境的字符缓冲区。有几个UTF-8 在以后的几年里,我们会增加一些特殊的功能,但我们一直在努力让 Xlib从此安息,将新的API设计推向xcb 相反


这可能会帮助某人。。。改编自xmodmap源代码和在线文档()


Keysym已经是UTF值。问题是设置组合键…'例如,

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

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版本,但您可以使用您需要的版本。

谢谢您的链接!代码基本上与问题中的link相同-它甚至使用相同的数据集。对于可能感兴趣的任何人,我为
XKeysymToUnicode()
编写了一个独立的、经麻省理工学院许可的实现。它使用
keysymdef.h
X11头文件中的定义。你可以在这里找到它:
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)