在 Windows 程序开发中如何最好地使用 UTF-8 进行文本处理?

And*_*dyK 7 c++ windows winapi encoding utf-8

我刚刚开始做一些 Windows 编程。

我正在尝试决定如何最好地处理非 ASCII 文本。

我更喜欢使用 8 位字符而不是 16 位字符,即将所有字符串声明为 char。

我读过UTF-8 Everywhere提案,我认为它们歪曲了 Windows 的当前状态。

自 Windows 10 版本 1803 (10.0.17134.0) 起,对 UTF-8 页面的支持已按照与其他多字节字符编码相同的标准实现。

我想现在我可以:

  • 确保 Visual Studio 使用EditorConfig 文件使用 UTF-8 存储源代码,并通过在 C/C++/命令行中指定“/utf-8”作为“附加”选项来使用 UTF-8 字符串

  • setlocale(LC_ALL,".UTF-8");通过调用和/或<activeCodePage xmlns="http://schemas.microsoft.com/SMI/2019/WindowsSettings">UTF-8</activeCodePage>在清单中设置,确保系统知道程序正在使用 UTF-8 字符串。(如果在“区域/语言/管理语言设置/区域设置”中勾选“测试版:使用 Unicode UTF-8 进行全球语言支持”,系统实际上会默认使用 UTF-8 - 我相信这会将活动代码页设置为 UTF- 8,并且是 Windows 11 的默认设置)。

  • 不要在源代码中定义UNICODEand _UNICODE,因此使用 Win32 'Ansi' 接口。Windows 会在内部将任何文本转换为 UTF-16。

  • 使用我习惯的标准字符串和 char 变量,而不是 wstring 和 wchar。

我做对了吗?

除了注意以某种方式依赖于单个字节中的单个字符的任何代码之外,我还需要做什么吗?

还是有什么陷阱在等着让我绊倒?