서로게이트 및 보조 문자

Windows 애플리케이션은 일반적으로 UTF-16을 사용하여 유니코드 문자 데이터를 나타냅니다. 16비트 를 사용하면 65,536개의 고유한 문자를 직접 표현할 수 있지만 이 BMP(기본 다국어 평면)는 인간 언어로 사용되는 모든 기호를 포함하기에 충분하지 않습니다. 유니코드 버전 4.1에는 97,000자 이상이 포함되며 중국어만 70,000자 이상입니다.

유니코드 표준은 각각 BMP와 동일한 크기의 16개의 추가 문자 "평면"을 설정했습니다. 당연히 BMP 이외의 대부분의 코드 포인트에는 아직 할당된 문자가 없지만 평면 정의는 유니코드에 U+0000~U+10FFFF 범위 내에서1,114,112 자(즉, 2 16 * 17자)를 정의할 수 있는 가능성을 제공합니다. UTF-16이 더 큰 문자 집합을 나타내기 위해 유니코드 표준은 "보조 문자"를 정의합니다.

보조 문자 정보

보조 문자는 BMP 이외의 문자이고 "서로게이트"는 UTF-16 코드 값입니다. UTF-16의 경우 단일 보조 문자를 나타내려면 "서로게이트 쌍"이 필요합니다. 첫 번째(높음) 서로게이트는 U+D800에서 U+DBFF 범위의 16비트 코드 값입니다. 두 번째(낮은) 서로게이트는 U+DC00에서 U+DFFF 범위의 16비트 코드 값입니다. UTF-16은 서로게이트 메커니즘을 사용하여 1,114,112자의 잠재적 유니코드 문자를 모두 지원할 수 있습니다. 보조 문자, 서로게이트 및 서로게이트 쌍에 대한 자세한 내용은 유니코드 표준을 참조하세요.

참고

Windows 2000에서는 기본 입력, 출력 및 간단한 보조 문자 정렬을 지원합니다. 그러나 모든 시스템 구성 요소가 보조 문자와 호환되는 것은 아닙니다.

 

운영 체제는 다음과 같은 방법으로 보조 문자를 지원합니다.

  • OpenType 글꼴 cmap 테이블의 서식 12는 4 바이트 문자 코드를 직접 지원합니다. 자세한 내용은 OpenType 글꼴 사양을 참조하세요.
  • Windows는 서로게이트 사용 IME(입력 메서드 편집기)를 지원합니다.
  • Windows GDI API는 서로게이트를 올바르게 표시할 수 있도록 글꼴로 12cmap 테이블 형식을 지원합니다.
  • Uniscribe API는 보조 문자를 지원합니다.
  • 편집서식 있는 편집을 비롯한 Windows 컨트롤은 보조 문자를 지원합니다.
  • HTML 엔진은 표시, 편집(Outlook Express를 통해) 및 양식 제출을 위한 추가 문자를 포함하는 HTML 페이지를 지원합니다.
  • 운영 체제 정렬 테이블은 보조 문자를 지원합니다.

보조 문자를 사용한 소프트웨어 개발에 대한 일반 지침

UTF-16은 보조 문자를 서로게이트 쌍으로 처리합니다. 운영 체제는 불투명 표시를 처리하는 방식과 유사하게 서로게이트 쌍을 처리합니다. 표시 시 서로게이트 쌍은 유니코드 표준에서 규정한 대로 Uniscribe를 통해 하나의 문자 모양으로 표시됩니다.

Windows Vista는 UTF-16 문자열에서 서로게이트 및 서로게이트 쌍을 식별하는 데 도움이 되는 세 가지 새로운 매크로를 도입했습니다. IS_HIGH_SURROGATE, IS_LOW_SURROGATEIS_SURROGATE_PAIR.

애플리케이션은 유니코드를 지원하고 ExtTextOutDrawText와 같은 표준 API 함수와 시스템 컨트롤을 사용하는 경우 보조 문자를 자동으로 지원합니다. 따라서 애플리케이션이 표준 시스템 컨트롤을 사용하거나 일반 ExtTextOut 형식 호출을 사용하여 표시하는 경우 추가 문자는 특별한 코딩 없이 작동해야 합니다.

문자 모양 위치를 사용자 지정한 방식으로 작업하여 자체 편집 지원을 구현하는 애플리케이션은 모든 텍스트 처리에 Uniscribe를 사용할 수 있습니다. Uniscribe에는 텍스트 표시, 적중 테스트 및 커서 이동과 같은 복잡한 스크립트 처리를 처리하는 별도의 함수가 있습니다. 애플리케이션은 이러한 고급 기능을 얻으려면 특별히 Uniscribe 함수를 호출해야 합니다. Uniscribe 함수를 사용하는 애플리케이션은 완전히 다국어이지만 성능 저하가 발생합니다. 따라서 일부 애플리케이션은 보조 문자를 자체 처리해야 합니다.

보조 문자를 나타내는 서로게이트 메커니즘이 잘 정의되어 있으므로 애플리케이션에 UTF-16 서로게이트 텍스트 처리를 처리하는 코드가 포함될 수 있습니다. 애플리케이션이 하위 예약된 서로게이트 범위(낮은 서로게이트) 또는 상위 예약 서로게이트 범위(높은 서로게이트)에서 분리된 UTF-16 값이 발견되면 값은 서로게이트 쌍의 절반이어야 합니다. 따라서 애플리케이션은 간단한 범위 검사를 수행하여 서로게이트 쌍을 검색할 수 있습니다. 하위 또는 상한 범위에서 UTF-16 값이 발생하는 경우 문자의 나머지 부분을 얻으려면 16비트 너비를 뒤로 또는 앞으로 추적해야 합니다. 애플리케이션을 작성할 때 CharNextCharPrev 는 서로게이트 쌍이 아닌 16비트 코드 포인트로 이동합니다.

참고

독립 실행형 서로게이트 코드 지점에는 인접한 낮은 서로게이트가 없는 높은 서로게이트가 있거나 그 반대의 경우도 마찬가지입니다. 이러한 코드 포인트는 유효하지 않으며 지원되지 않습니다. 해당 동작은 정의되지 않았습니다.

 

글꼴 또는 IME 공급자를 개발하는 경우 Windows XP 이전 운영 체제에서는 기본적으로 보조 문자 지원을 사용하지 않도록 설정합니다. Windows XP 이상에서는 기본적으로 보조 문자를 사용하도록 설정합니다. 보조 문자가 필요한 글꼴 및 IME 패키지를 제공하는 경우 애플리케이션은 다음 레지스트리 값을 설정해야 합니다.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\LanguagePack]
SURROGATE=(REG_DWORD)0x00000002

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\International\Scripts\42]
IEFixedFontName=[Surrogate Font Face Name]
IEPropFontName=[Surrogate Font Face Name]

문자 집합