- https://142857.red/book/unicode/#windows >从 Windows NT 版本开始,对于所有涉及字符串的,其操作系统 API 提供了两套函数。 > >- 一套是 A 系列函数,以 A 结尾,例如 CreateFileA,这些函数接收 ANSI(即 GBK)编码的字符串。 >- 另一套是 W 系列函数,以 W 结尾,例如 CreateFileW,这些函数接收 Unicode(即 UTF-16)编码的字符串。 其中 CreateFileW 才是 Windows 系统真正的 API。 > >而 CreateFileA 是为了兼容基于 ANSI 的老程序. A 系列函数是根据当前系统区域设置(区域语言环境)使用的编码,也就是 Windows 操作系统的当前“代码页”或“区域编码”。这个编码并不固定为 GBK 或其他特定编码,而是和系统的区域设置相关。 也并非是所谓的兼容老程序。 另外,在 visual studio 的 sln 解决方案中,还有一个非常抽象的选项设置。在 **配置属性 -> 常规 -> 字符集**。 很多人都以为这里可以设置所谓的编码,点击下拉选项你可以选择多字节字符集或者 Unicode 字符集。但是这纯属是一种误导,它既无法改变源字符集,也无法改变执行字符集,它做的事情无非是添加宏定义。 当你选择 Unicode 字符集的时候,添加链接选项 ` /D "UNICODE"` 实则就是定义 _UNICODE 宏。 > 它只不过是在使用宏函数的时候,用来选择 A 或者 W 系列函数而已。 https://learn.microsoft.com/zh-cn/cpp/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support?view=msvc-170 https://learn.microsoft.com/zh-cn/cpp/text/unicode-programming-summary?view=msvc-170