Microsoft Windows提供了几个函数来查询当前的代码页: GetACP
, GetConsoleOutputCP
, 以及 GetConsoleCP
。
它们返回不同的值。例如,在我的机器上,GetACP
返回1252,而 GetConsoleOutputCP
和 GetConsoleCP
返回437。
(我们也可以在命令行上运行 chcp
并得到 437)
- 为什么Windows为控制台和非控制台提供不同的代码页?
- 这些代码页如何由每台机器确定?
- 同一台机器上的代码页之间有什么关系?控制台和非控制台代码页之间是否存在相关性?具有代码页1252的机器是否总是具有437的控制台代码页?
这个问题的背景是来自Visual Studio C++的错误信息:
error C2855: command-line option '/source-charset' inconsistent with precompiled header
error C2855: command-line option '/execution-charset' inconsistent with precompiled header
当预编译头文件所使用的默认代码页与使用它们的CPP文件的代码页不同时(出于某些原因),会出现这些错误。
以下摘自MSDN文档:
所以我正在尝试弄清楚他们所指的那个代码页是指由如果没有找到字节顺序标记,则假定源文件使用当前用户代码页进行编码,除非您使用
/source-charset
选项指定字符集名称或代码页。
GetACP
返回的代码页还是其他代码页...