更新:

更新:

我们知道有一个应用程序叫AppLocale,它可以改变非Unicode应用程序的代码页,来解决文本显示问题。

但有一个程序正确显示代码页采用 UTF-8 编码,这意味着其文本应显示为 UTF-8,而是 Windows将其显示为本机代码页并使文本无法阅读。这看起来很有趣,因为几乎所有国家和地区都有,但没有 UTF-8。我认为这是一个错误,因为程序员可能使用英语而忽略了测试非英语文本显示问题。我不认为制作人会修复它,我想自己修复它。

是否可以使用 AppLocale 等软件将非 Unicode 输出设置为 UTF-8?默认非 Unicode 输出是本机代码页?如何将本机代码页设置为 UTF-8?

答案1

以前这是不可能的,因为

微软声称 UTF-8 区域设置可能会破坏某些功能(一个可能的例子是_mbsrev),因为它们在编写时假设多字节编码每个字符使用的字节数不超过 2 个,因此到目前为止,具有更多字节的代码页(例如 GB 18030(cp54936)和 UTF-8)不能被设置为区域设置。

https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows#UTF-8

然而有一个“测试版:使用 Unicode UTF-8 提供全球语言支持”自 Windows 10 内部版本 17035 以来,复选框用于将区域设置代码页设置为 UTF-8

测试版:使用 Unicode UTF-8 提供全球语言支持

也可以看看

尽管如此,目前支持仍存在缺陷


更新:

微软还增加了程序使用 UTF-8 语言环境的功能,甚至无需设置上面的 UTF-8 beta 标志。您可以使用/execution-charset:utf-8或者/utf-8使用 MSVC 编译时的选项或在 appxmanifest 中设置 ActiveCodePage 属性

您还可以通过链接适当的 C 运行时在旧版 Windows 中使用 UTF-8 语言环境

从 Windows 10 内部版本 17134(2018 年 4 月更新)开始,通用 C 运行时支持使用 UTF-8 代码页。这意味着char传递给 C 运行时函数的字符串将需要 UTF-8 编码的字符串。要启用 UTF-8 模式,请在使用时使用“UTF-8”作为代码页setlocale。例如,setlocale(LC_ALL, ".utf8")将使用当前默认的 Windows ANSI 代码页 (ACP) 作为语言环境,并使用 UTF-8 作为代码页。

...

要在 Windows 10 之前的操作系统(如 Windows 7)上使用此功能,您必须使用应用程序本地部署或者使用 Windows SDK 17134 或更高版本进行静态链接。对于 17134 之前的 Windows 10 操作系统,仅支持静态链接。

UTF-8 支持

答案2

从我读到的有关微软的信息维基百科上的 AppLocale 工具,该工具无法将您的代码页更改为 UTF-8。仅适用于非 Unicode 应用程序,但UTF-8是Unicode标准的一部分。

从本质上讲,Unicode 对非 ASCII 字符的处理与非 Unicode 字符的处理有很大不同,因此虽然可以在非 Unicode 代码页之间切换(这是 AppLocale 所做的),但如果不修改应用程序,就无法在 Unicode 和非 Unicode 之间切换。

答案3

这里要提一下:在 Windows 10 17133 中,现在有一个测试版选项可以使用 UTF-8 来提供全球支持。但目前它对我的非 Unicode 程序没有帮助,但它被放置在弹出窗口中,我可以在其中更改非 Unicode 程序的区域设置。

因此,也许他们正在努力寻找某种方法来结束必须更改非 Unicode 程序的区域设置的必要性。

相关内容