控制台应用程序问题

8 位控制台函数使用 OEM 代码页。 所有其他函数默认使用 ANSI 代码页。 这意味着控制台函数返回的字符串可能无法由其他函数正确处理,反之亦然。 例如,如果 FindFirstFileA 返回包含某些扩展 ANSI 字符的字符串, WriteConsoleA 将不会正确显示该字符串。

控制台应用程序的最佳长期解决方案是使用 Unicode。 使用 SetConsoleCP 和 SetConsoleOutputCP 转换为 65001CP_UTF8 UTF-8 代码页后,控制台将接受 API 的 W 变体上的 UTF-16 编码或 UTF-8 编码的 UTF-8 编码。

如果阻止该解决方案,控制台应用程序应使用 SetFileApisToOEM 函数。 该函数更改相关的文件函数,以便生成 OEM 字符集字符串,而不是 ANSI 字符集字符串。

以下是文件函数:

处理命令行时,控制台应用程序应获取 Unicode 窗体中的命令行,并使用相关的字符到 OEM 函数将其转换为 OEM 窗体。 另请注意, argv 使用 ANSI 字符集。