Open Mq-b opened 2 weeks ago
从 Windows NT 版本开始,对于所有涉及字符串的,其操作系统 API 提供了两套函数。 一套是 A 系列函数,以 A 结尾,例如 CreateFileA,这些函数接收 ANSI(即 GBK)编码的字符串。 另一套是 W 系列函数,以 W 结尾,例如 CreateFileW,这些函数接收 Unicode(即 UTF-16)编码的字符串。 其中 CreateFileW 才是 Windows 系统真正的 API。 而 CreateFileA 是为了兼容基于 ANSI 的老程序.
从 Windows NT 版本开始,对于所有涉及字符串的,其操作系统 API 提供了两套函数。
而 CreateFileA 是为了兼容基于 ANSI 的老程序.
A 系列函数是根据当前系统区域设置(区域语言环境)使用的编码,也就是 Windows 操作系统的当前“代码页”或“区域编码”。这个编码并不固定为 GBK 或其他特定编码,而是和系统的区域设置相关。
也并非是所谓的兼容老程序。
另外,在 visual studio 的 sln 解决方案中,还有一个非常抽象的选项设置。在 配置熟悉 -> 常规 -> 字符集。
很多人都以为这里可以设置所谓的编码,点击下拉选项你可以选择多字节字符集或者 Unicode 字符集。但是这纯属是一种误导,它既无法改变源字符集,也无法改变执行字符集,它做的事情无非是添加宏定义。
当你选择 Unicode 字符集的时候,添加链接选项 /D "UNICODE" 实则就是定义 _UNICODE 宏。
/D "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
A 系列函数是根据当前系统区域设置(区域语言环境)使用的编码,也就是 Windows 操作系统的当前“代码页”或“区域编码”。这个编码并不固定为 GBK 或其他特定编码,而是和系统的区域设置相关。
也并非是所谓的兼容老程序。
另外,在 visual studio 的 sln 解决方案中,还有一个非常抽象的选项设置。在 配置熟悉 -> 常规 -> 字符集。
很多人都以为这里可以设置所谓的编码,点击下拉选项你可以选择多字节字符集或者 Unicode 字符集。但是这纯属是一种误导,它既无法改变源字符集,也无法改变执行字符集,它做的事情无非是添加宏定义。
当你选择 Unicode 字符集的时候,添加链接选项
/D "UNICODE"
实则就是定义 _UNICODE 宏。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