答案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 则切换了那些来自 CP1252到UTF-8。
修复此问题 – 正如用户“AZeroEight”所写:
新系统上有一个用于 Beta UTF-8 支持的复选框,取消选中并重新启动 Barrier 便解决了这个问题。