我们知道有一个应用程序叫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
也可以看看
尽管如此,目前支持仍存在缺陷
- 使用 UTF-8 作为默认代码页时,Windows 10 1803 中出现冻结问题
- 当 Windows 10 中的 Unicode Beta 支持打开时,附加组件无法安装
- UTF-8 对单字节字符集的支持在 Windows 中处于测试阶段,可能会破坏许多未预料到的应用程序
- 由于 MSVC 中的内部错误,构建失败
更新:
微软还增加了程序使用 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 操作系统,仅支持静态链接。
答案2
从我读到的有关微软的信息维基百科上的 AppLocale 工具,该工具无法将您的代码页更改为 UTF-8。仅适用于非 Unicode 应用程序,但UTF-8是Unicode标准的一部分。
从本质上讲,Unicode 对非 ASCII 字符的处理与非 Unicode 字符的处理有很大不同,因此虽然可以在非 Unicode 代码页之间切换(这是 AppLocale 所做的),但如果不修改应用程序,就无法在 Unicode 和非 Unicode 之间切换。
答案3
这里要提一下:在 Windows 10 17133 中,现在有一个测试版选项可以使用 UTF-8 来提供全球支持。但目前它对我的非 Unicode 程序没有帮助,但它被放置在弹出窗口中,我可以在其中更改非 Unicode 程序的区域设置。
因此,也许他们正在努力寻找某种方法来结束必须更改非 Unicode 程序的区域设置的必要性。