학습
코드 페이지
오늘날 작성된 대부분의 애플리케이션은 UTF-16 인코딩을 사용하여 문자 데이터를 주로 유니코드로 처리합니다. 그러나 많은 레거시 애플리케이션은 코드 페이지를 기반으로 문자 집합을 계속 사용합니다. 새 애플리케이션도 다음과 같은 이유 중 하나로 코드 페이지로 작업해야 하는 경우가 많습니다.
- 레거시 애플리케이션과 통신합니다.
- 유니코드를 항상 지원하지 않을 수 있는 이전 메일 및 뉴스 서버와 통신하려면
- 레거시 목적으로 Windows 콘솔과 통신하려면 콘솔은 유니코드를 지원하지만 일부 레거시 명령줄 애플리케이션 도구는 지원하지 않을 수 있습니다.
참고
새 Windows 애플리케이션은 유니코드 를 사용하여 다양한 코드 페이지의 불일치를 방지하고 쉽게 지역화해야 합니다.
각 코드 페이지는 코드 페이지 식별자(예: 1252)로 표시되며 유니코드 및 문자 집합 API 함수에서 처리됩니다. 지원되는 코드 페이지 식별자 목록은 코드 페이지 식별자를 참조하세요. Microsoft Go 글로벌 개발자 센터의 "코드 페이지" 참조는 많은 코드 페이지에 대한 전체 설명을 제공합니다.
일반적으로 "ANSI 코드 페이지"라고 하는 Windows 코드 페이지는 ASCII가 아닌 값(127보다 큰 값)이 국제 문자를 나타내는 코드 페이지입니다. 이러한 코드 페이지는 Windows Me에서 기본적으로 사용되며 Windows NT 이상에서도 사용할 수 있습니다.
참고
원래 영어 및 기타 서유럽 언어에 일반적으로 사용되는 코드 페이지인 Windows 코드 페이지 1252는 ANSI(미국 국립 표준 연구소) 초안을 기반으로 했습니다. 이 초안은 결국 ISO 8859-1이 되었지만 Windows 코드 페이지 1252는 표준이 최종되기 전에 구현되었으며 ISO 8859-1과 정확히 동일하지 않습니다.
많은 Windows API 함수에는 ANSI("A") 및 "W"(와이드, 유니코드) 버전이 있습니다. "A" 버전은 Windows 코드 페이지를 기반으로 텍스트를 처리하고 "W" 버전은 유니코드 텍스트를 처리합니다. 함수 프로토타입에 대한 문자열 및 규칙에 대한 Windows 데이터 형식을 참조하세요.
Windows 코드 페이지를 "활성 코드 페이지" 또는 "시스템 활성 코드 페이지"라고도 합니다. Windows 운영 체제에는 항상 현재 활성 Windows 코드 페이지가 하나 있습니다. 모든 ANSI 버전의 API 함수는 현재 활성 코드 페이지를 사용합니다.
OEM(원본 장비 제조업체) 코드 페이지는 비 ASCII 값이 선 그리기 및 문장 부호 문자를 나타내는 코드 페이지입니다. 이러한 코드 페이지는 원래 MS-DOS에 사용되었으며 콘솔 애플리케이션에 계속 사용됩니다. 또한 파일 이름에 사용되는 문자 집합에 설명된 대로 FAT12, FAT16 및 FAT32 파일 시스템의 확장되지 않은 파일 이름에도 사용됩니다. 영어의 일반적인 OEM 코드 페이지는 코드 페이지 437입니다.
Windows 코드 페이지와 OEM 코드 페이지 모두에 대해 0x7F 통해 0x00 코드 값은 7비트 ASCII 문자 집합에 해당합니다. 0x19 및 0x7F 통해 0x00 코드 값은 항상 표준화된 컨트롤 문자를 나타내고 0x7E 통해 0x20 표준화된 표시 가능한 문자를 나타냅니다. 0xff 0x80 나머지 코드로 표시되는 문자는 문자 집합마다 다릅니다. 각 문자 집합에는 일반적으로 언어 또는 언어 그룹에 맞게 사용자 지정된 다양한 특수 문자가 포함됩니다. Windows 코드 페이지 1252 및 OEM 코드 페이지 437은 일반적으로 미국 사용됩니다.
애플리케이션은 Windows 및 OEM 코드 페이지 외에도 네이티브가 아닌 코드 페이지를 사용할 수 있습니다. 예를 들어 EBCDIC 및 Macintosh 코드 페이지가 있습니다.
유니코드(UTF-7 및 UTF-8)의 두 인코딩이 코드 페이지로 구현됩니다. 다른 코드 페이지와 마찬가지로 각 페이지는 숫자 식별자로 알려져 있으며 동일한 많은 유니코드 및 문자 집합 API 함수로 처리할 수 있습니다.
코드 페이지는 SBCS( 단일 바이트 문자 집합 ) 페이지 또는 DBCS( 더블 바이트 문자 집합 ) 페이지일 수 있습니다. SBCS 페이지에서 각 바이트는 단일 문자를 직접 인코딩하므로 정확히 256개의 고유 문자(컨트롤 문자, 문자, 숫자, 문장 부호, 기호 등 포함)를 나타낼 수 있습니다. DBCS 코드 페이지는 일본어 및 중국어와 같은 언어에 사용됩니다. 이러한 코드 페이지에서 일부 문자에는 "리드 바이트"로 사용되는 특정 바이트 값(항상 127보다 큰 값)이 있는 2바이트 인코딩이 있습니다. 직접 문자를 인코딩하는 대신 납 바이트를 "trail byte"와 함께 문자에만 매핑할 수 있습니다.
일부 레거시 프로토콜에는 SBCS 및 DBCS 코드 페이지를 사용해야 합니다. 각 SBCS/DBCS 코드 페이지는 서로 다른 문자를 지원하지만 코드 페이지는 유니코드에서 제공하는 전체 문자 범위를 지원하지 않습니다. 각 SBCS/DBCS 코드 페이지는 다르게 인코딩된 다른 하위 집합을 지원합니다.
참고
SBCS 또는 DBCS 코드 페이지에서 다른 SBCS 코드 페이지로 변환된 데이터는 손상될 수 있습니다. 다른 코드 페이지의 동일한 데이터 값이 다른 문자를 인코딩할 수 있기 때문입니다. 유니코드에서 SBCS 또는 DBCS로 변환된 데이터는 데이터가 손실될 수 있습니다. 지정된 코드 페이지가 특정 유니코드 데이터에 사용되는 모든 문자를 나타내지 못할 수 있기 때문입니다.
SBCS 및 DBCS 코드 페이지 외에도 애플리케이션은 DBCS와 유사한 접근 방식을 사용하는 멀티바이트 문자 집합 코드 페이지 52936, 54936, 51949 및 5022x를 사용할 수 있습니다. 그러나 멀티바이트 문자 집합 코드 페이지는 일부 문자의 2바이트 인코딩을 초과합니다. UTF-7 및 UTF-8은 각각 7비트 및 8비트 바이트를 기반으로 유니코드를 인코딩하는 유사한 방법을 사용합니다. 자세한 내용은 유니코드를 참조하세요.
여러 유니코드 및 문자 집합 함수를 사용하면 애플리케이션에서 코드 페이지를 처리할 수 있습니다. 애플리케이션은 GetCPInfo 및 GetCPInfoEx 함수를 사용하여 코드 페이지에 대한 정보를 가져올 수 있습니다. 이 정보에는 변환된 문자열의 문자에 코드 페이지에 해당 항목이 없을 때 사용되는 기본 문자가 포함됩니다.
애플리케이션은 MultiByteToWideChar 및 WideCharToMultiByte 함수를 사용하여 Windows 코드 페이지와 유니코드 문자열을 기반으로 문자열 간에 변환할 수 있습니다. 이름은 "MultiByte"를 참조하지만 이러한 함수는 SBCS, DBCS 및 멀티바이트 문자 집합 코드 페이지에서도 동일하게 작동합니다.
참고
제공된 코드 페이지가 유니코드 문자열의 모든 문자를 나타낼 수 없는 경우 WideCharToMultiByte는 일부 데이터를 잃을 수 있습니다.
애플리케이션은 표준 C 런타임 라이브러리 함수를 사용하여 Windows 코드 페이지와 OEM 코드 페이지 간에 변환할 수 있습니다. 그러나 이러한 함수를 사용하면 각 코드 페이지에서 나타낼 수 있는 문자가 정확히 일치하지 않으므로 데이터 손실 위험이 있습니다.
애플리케이션에서 GetACP 함수를 호출할 수도 있습니다. 이 함수는 현재 WINDOWS(ANSI) 코드 페이지의 식별자를 검색합니다.