是否可以将 Windows 应用程序的“语言环境”设置为 UTF-8?

Kom*_*oko 4 windows locale code-page

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

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

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

phu*_*clv 5

以前是不可能的,因为

微软声称 UTF-8 语言环境可能会破坏某些功能(一个可能的例子是_mbsrev),因为它们被编写为假设使用的多字节编码每个字符不超过 2 个字节,因此直到现在代码页具有更多字节,例如 GB 18030 (cp54936) 和无法将 UTF-8 设置为语言环境。

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

但是,自 Windows 10 Insider build 17035 以来,有一个“Beta:使用 Unicode UTF-8 进行全球语言支持”复选框,用于将区域设置代码页设置为 UTF-8

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

也可以看看

也就是说,此时的支持仍然存在问题


更新:

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

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

从 Windows 10 内部版本 17134(2018 年 4 月更新)开始,通用 C 运行时支持使用 UTF-8 代码页。这意味着char传递给 C 运行时函数的字符串将需要 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 支持


mir*_*lav 0

根据我在 Wikipedia 上读到的有关 Microsoft AppLocale 工具的信息,该工具无法将您的代码页更改为 UTF-8。它仅适用于非 Unicode 应用程序,但 UTF-8 是 Unicode 标准的一部分。

在幕后,非 ASCII 字符的 Unicode 处理与非 Unicode 字符有很大不同,因此虽然可以在非 Unicode 代码页之间进行更改(这就是 AppLocale 所做的),但不可能在 Unicode 和非 Unicode 之间进行更改。 Unicode 未经其生产者制作的应用程序的修改。