主控台應用程式問題
8 位控制台函式會使用 OEM 代碼頁。 所有其他函式預設都會使用 ANSI 代碼頁。 這表示主控台函式傳回的字串可能無法由其他函式正確處理,反之亦然。 例如,如果 FindFirstFileA 傳回包含特定擴充 ANSI 字元的字串, WriteConsoleA 將不會正確顯示字串。
主控台應用程式的最佳長期解決方案是使用 Unicode。 控制台會在使用 SetConsoleCP 和 SetConsoleOutputCP 對 UTF-8 代碼頁使用 SetConsoleCP 和 SetConsoleOutputCP 到 65001
CP_UTF8
UTF-8 代碼頁之後,接受 API 的 W 變異或 UTF-8 編碼的 UTF-16 編碼。
在解決方案中,控制台應用程式應該使用 SetFileApisToOEM 函式。 該函式會變更相關的檔案函式,使其產生 OEM 字元集字串,而不是 ANSI 字元集字串。
以下是檔案函式:
CopyFile
CreateDirectory
CreateFile
CreateProcess
DeleteFile
FindFirstFile
FindNextFile
GetCurrentDirectory
GetDiskFreeSpace
GetDriveType
處理命令行時,控制台應用程式應該使用相關的字元到 OEM 函式,取得 Unicode 窗體中的命令行,並將其轉換為 OEM 表體。 另請注意, argv 會使用 ANSI 字元集。