控制台应用程序问题

【勇芳软件工作室】汉化HomePreviousNext

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

控制台应用程序的最佳长期解决方案是使用Unicode。除了该解决方案外,控制台应用程序应使用SetFileApisToOEM功能。该函数更改相关的Win32文件函数,以便它们生成OEM字符集字符串而不是ANSI字符集字符串。

以下是Win32文件功能:

_lopenGetDriveTypeLoadLibrary
CopyFileGetFileAttributesLoadLibraryEx
CreateDirectoryGetFullPathNameMoveFile
CreateFileGetModuleFileNameMoveFileEx
CreateProcessGetModuleHandleOpenFile
DeleteFileGetSystemDirectoryRemoveDirectory
FindFirstFileGetTempFileNameSearchPath
FindNextFileGetTempPathSetCurrentDirectory
GetCurrentDirectoryGetVolumeInformationSetFileAttributes
GetDiskFreeSpaceGetWindowsDirectory 

处理命令行时,控制台应用程序应以Unicode格式获取命令行,并使用相关的字符到OEM功能将其转换为OEM格式。另请注意,ARGV使用ANSI字符集。