다음을 통해 공유


콘솔 애플리케이션 문제

8비트 콘솔 함수는 OEM 코드 페이지를 사용합니다. 다른 모든 함수는 기본적으로 ANSI 코드 페이지를 사용합니다. 즉, 콘솔 함수에서 반환된 문자열이 다른 함수에 의해 올바르게 처리되지 않을 수 있으며 그 반대의 경우도 마찬가지입니다. 예를 들어 FindFirstFileA가 특정 확장된 ANSI 문자를 포함하는 문자열을 반환하는 경우 WriteConsoleA는 문자열을 제대로 표시하지 않습니다.

콘솔 애플리케이션에 가장 적합한 장기 솔루션은 유니코드를 사용하는 것입니다. 콘솔은 SETConsoleCP 및 SetConsoleOutputCP65001를 UTF-8 코드 페이지에 대해 (CP_UTF8상수)로 사용한 후 API의 A 변형에 대한 UTF-8 인코딩 또는 API의 W 변형에 대한 UTF-16 인코딩을 허용합니다.

해당 솔루션을 제외하면 콘솔 애플리케이션은 SetFileApisToOEM 함수를 사용해야 합니다. 이 함수는 관련 파일 함수를 변경하여 ANSI 문자 집합 문자열이 아닌 OEM 문자 집합 문자열을 생성합니다.

파일 함수는 다음과 같습니다.

명령줄을 처리할 때 콘솔 애플리케이션은 유니코드 형식의 명령줄을 가져와 관련 문자-OEM 함수를 사용하여 OEM 형식으로 변환해야 합니다. 또한 argvANSI 문자 집합을 사용합니다.