8位控制台功能使用OEM代码页。所有其他功能默认使用ANSI代码页。这意味着控制台功能返回的字符串可能不会被其他函数正确处理,反之亦然。例如,如果FindFirstFileA返回一个包含某些扩展的ANSI字符的字符串,WriteConsoleA将不会正确显示字符串。
控制台应用程序的最佳长期解决方案是使用Unicode。除了该解决方案外,控制台应用程序应使用SetFileApisToOEM功能。该函数更改相关的Win32文件函数,以便它们生成OEM字符集字符串而不是ANSI字符集字符串。
以下是Win32文件功能:
处理命令行时,控制台应用程序应以Unicode格式获取命令行,并使用相关的字符到OEM功能将其转换为OEM格式。另请注意,ARGV使用ANSI字符集。