콘솔 애플리케이션 문제
8비트 콘솔 함수는 OEM 코드 페이지를 사용합니다. 다른 모든 함수는 기본적으로 ANSI 코드 페이지를 사용합니다. 즉, 콘솔 함수에서 반환된 문자열이 다른 함수에 의해 올바르게 처리되지 않을 수 있으며 그 반대의 경우도 마찬가지입니다. 예를 들어 FindFirstFileA가 특정 확장된 ANSI 문자를 포함하는 문자열을 반환하는 경우 WriteConsoleA는 문자열을 제대로 표시하지 않습니다.
콘솔 애플리케이션에 가장 적합한 장기 솔루션은 유니코드를 사용하는 것입니다. 콘솔은 SETConsoleCP 및 SetConsoleOutputCP65001
를 UTF-8 코드 페이지에 대해 (CP_UTF8
상수)로 사용한 후 API의 A 변형에 대한 UTF-8 인코딩 또는 API의 W 변형에 대한 UTF-16 인코딩을 허용합니다.
해당 솔루션을 제외하면 콘솔 애플리케이션은 SetFileApisToOEM 함수를 사용해야 합니다. 이 함수는 관련 파일 함수를 변경하여 ANSI 문자 집합 문자열이 아닌 OEM 문자 집합 문자열을 생성합니다.
파일 함수는 다음과 같습니다.
CopyFile
CreateDirectory
CreateFile
Createprocess
DeleteFile
FindFirstFile
FindNextFile
GetCurrentDirectory
GetDiskFreeSpace
GetDriveType
명령줄을 처리할 때 콘솔 애플리케이션은 유니코드 형식의 명령줄을 가져와 관련 문자-OEM 함수를 사용하여 OEM 형식으로 변환해야 합니다. 또한 argv는 ANSI 문자 집합을 사용합니다.