在 Windows 10 中发送 UTF-8 键码而不是 UTF-16

在 Windows 10 中发送 UTF-8 键码而不是 UTF-16

据我所知,Windows 10 从前一段时间开始以 UTF-16 格式向程序发送按键。虽然我喜欢这个想法,但它带来了巨大的对我来说有问题,因为我有软件(障碍) 不支持它。

所以我想知道是否有某种方法可以让 Windows 发送“正常”的 UTF-8 键码?

以下是 Barrier 软件的已知问题描述在这里

障碍:UTF-8 复选框对我没什么用,尽管在多个地方都建议这样做。我最终找到的解决方案是将客户端语言切换为我的母语。即使我后来在服务器上使用 Linux,这种方法仍然有效。

答案1

Windows 中的原生“Unicode”程序总是处理 UTF-16。这对于 Win10 来说并不新鲜——Win7、WinXP、Win2000 以及整个 Windows NT 系列都是如此。

但是,为了保持与非常老旧(Win98 时代)软件的兼容性,Windows 具有双重 API——实际上每个处理字符串的函数在后台都有两个版本,一个是“Unicode”版本,例如使用 UTF-16 的 CreateFileW(),另一个是“ANSI”版本,例如使用旧版 Windows-125x 字符集的 CreateFileA()。程序员只需编写“CreateFile()”,在编译时将其替换为其中一个。

但许多编写跨操作系统软件的程序员发现 UTF-16 非常不方便,因为它无法在简单的 C 字符串中处理。因此,微软最近决定他们终于可以重新利用 Win98 兼容性 API,并添加了这个复选框这会将“ANSI”函数切换为使用 UTF-8 而不是 Windows-125x。但是,这对“Unicode”函数没有任何影响,它们仍像以前一样使用 UTF-16。

因此,问题不在于 Windows 从 UTF-8 切换到 UTF-16;情况从来都不是这样的。问题在于——如果 GitHub 线程是正确的——该程序似乎是使用“ANSI”API 编译的(它从未与 Unicode 兼容根本过去),而 Windows 则切换了那些来自 CP1252UTF-8。

修复此问题 – 正如用户“AZeroEight”所写:

新系统上有一个用于 Beta UTF-8 支持的复选框,取消选中并重新启动 Barrier 便解决了这个问题。

相关内容