【发布时间】:2017-08-28 14:09:39
【问题描述】:
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 docs:
如果未找到字节顺序标记,则假定源文件已编码 使用当前用户代码页,除非您指定字符集 使用 /source-charset 选项的名称或代码页。
所以我试图找出它们引用的代码页,GetACP 或其他返回的代码页...
【问题讨论】:
标签: windows visual-studio visual-studio-2015 windows-console codepages