从 Rust 中的扫描码中检索与键盘布局无关的键入字符

Retrieving keyboard-layout-independent typed characters from scancodes in Rust

我想用 Rust 编写一个低级、快速的文本编辑器。对于 graphics/windowing,我计划使用 SFML 在 Windows、macOS 和 Linux 之间轻松快速地实现交叉兼容性。

现在,我遇到的问题是在需要 Shift 键的文本编辑器中键入字符时。 SFML,甚至其他查询本机操作系统系统调用的库,如 keyboard_query 只给你扫描码,如“SHIFT 和 3 被按下”,现在,在我的键盘(英国 Macintosh 键盘)上我希望它产生一个 £ 在文本编辑器中,但美国人希望它产生 #,以此类推用于其他键盘布局。

是否有一种可靠的跨平台方式来知道某人想键入哪个字符而不考虑他们的键盘布局?

做不到这一点,有没有办法只在 macOS 中做到这一点?或者我是否必须为我想要支持的每个键盘布局键入 Shift + 任何键生成的内容的大映射?

如果您已经在使用 SFML,则不需要转换扫描码。

而不是监视 Event::KeyPressed, you could just watch for Event::TextEntered. That way you get a unicode: char, which you can insert directly into your string. The exception being, that you'd still need to watch for Event::KeyPressed,以便能够处理例如退格键。