Unicode
유니코드는 전 세계 문자 인코딩 표준입니다. 시스템은 문자 및 문자열 조작에 유니코드만 사용합니다. 유니코드의 모든 측면에 대한 자세한 설명 은 유니코드 표준을 참조하세요.
유니코드는 문자 및 문자열 데이터를 처리하기 위한 이전 메커니즘과 비교하여 소프트웨어 지역화를 간소화하고 다국어 텍스트 처리를 개선합니다. 유니코드를 사용하여 애플리케이션의 문자 및 문자열 데이터를 나타내면 가능한 모든 문자 코드에 대해 단일 이진 파일을 사용하여 글로벌 마케팅에 범용 데이터 교환 기능을 사용하도록 설정할 수 있습니다. 유니코드는 다음을 수행합니다.
- 스크립트와 언어의 조합으로 그린 모든 문자 조합이 단일 문서에 공존할 수 있도록 허용합니다.
- 각 문자에 대한 의미 체계를 정의합니다.
- 스크립트 동작을 표준화합니다.
- 양방향 텍스트에 대한 표준 알고리즘을 제공합니다.
- 다른 표준에 대한 교차 매핑을 정의합니다.
- 단일 문자 집합(UTF-7, UTF-8, UTF-16 및 UTF-32)의 여러 인코딩을 정의합니다. 이러한 인코딩 간의 데이터 변환은 무손실입니다.
유니코드는 전 세계 언어에서 사용되는 수많은 스크립트와 게시에 사용되는 많은 기술 기호 및 특수 문자를 지원합니다. 지원되는 스크립트는 라틴어, 그리스어, 키릴 자모, 히브리어, 아랍어, 데바나가리, 태국어, 한, 한글, 히라가나 및 가타카나를 포함하지만 이에 국한되지 않습니다. 지원되는 언어는 독일어, 프랑스어, 영어, 그리스어, 러시아어, 히브리어, 아랍어, 힌디어, 태국어, 중국어, 한국어 및 일본어를 포함하지만 이에 국한되지 않습니다. 유니코드는 현재 전 세계에서 사용하는 최신 컴퓨터의 대부분의 문자를 나타낼 수 있으며, 더욱 완성도를 위해 계속 업데이트되고 있습니다.
유니코드 사용 함수는 함수 프로토타입 규칙에서 설명합니다. 이러한 함수는 유니코드의 가장 일반적인 인코딩이자 Windows 운영 체제의 네이티브 유니코드 인코딩에 사용되는 UTF-16(와이드 문자) 인코딩을 사용합니다. 각 코드 값은 8비트 코드 값을 사용하는 문자 및 문자열 데이터에 대한 이전 코드 페이지 접근 방식과 달리 너비가 16비트입니다. 16비트 사용은 65,536자의 직접 인코딩을 허용합니다. 실제로 인간 언어를 전사하는 데 사용되는 기호의 우주는 그보다 훨씬 크며 U+D800~U+DFFF 범위의 UTF-16 코드 포인트는 보조 문자의 32비트 인코딩을 구성하는 서로게이트 쌍을 형성하는 데 사용됩니다. 자세한 내용은 서로게이트 및 보조 문자를 참조하세요.
유니코드 문자 집합에는 U+0308(" "), 결합 다이어시스 또는 움라우트와 같은 다양한 결합 문자가 포함되어 있습니다. 유니코드는 종종 ''composed'' 또는 ''decomposed'' 형식으로 동일한 문자 모양을 나타낼 수 있습니다. 예를 들어 "Ä"의 구성 형식은 단일 유니코드 코드 포인트 "Ä"(U+00C4)이고, 분해된 형식은 "A" + " "(U+0041 U+0308)입니다. 유니코드는 모든 문자 모양에 대해 구성된 양식을 정의하지 않습니다. 예를 들어 circumflex 및 타일("")이 있는 베트남어 소문자 "o"는 U+006f U+0302 U+0303(o + Circumflex + Tilde)으로 표시됩니다. 문자 및 관련 문제를 결합하는 방법에 대한 자세한 내용은 유니코드 정규화를 사용하여 문자열 표현을 참조하세요.
8비트 및 7비트 환경과의 호환성을 위해 유니코드를 각각 UTF-8 및 UTF-7로 인코딩할 수도 있습니다. Windows의 유니코드 지원 함수는 UTF-16을 사용하지만 WINDOWS에서 멀티바이트 문자 집합 코드 페이지로 지원되는 UTF-8 또는 UTF-7로 인코딩된 데이터로 작업할 수도 있습니다.
새 Windows 애플리케이션은 UTF-16을 내부 데이터 표현으로 사용해야 합니다. 또한 Windows는 코드 페이지에 대한 광범위한 지원을 제공하며 동일한 애플리케이션에서 혼합 사용이 가능합니다. 새로운 유니코드 기반 애플리케이션도 코드 페이지로 작업해야 하는 경우가 있습니다. 그 이유는 코드 페이지에서 설명합니다.
애플리케이션은 MultiByteToWideChar 및 WideCharToMultiByte 함수를 사용하여 코드 페이지와 유니코드 문자열을 기반으로 문자열 간에 변환할 수 있습니다. 이름이 "MultiByte"를 참조하지만 이러한 함수는 SBCS( 싱글 바이트 문자 집합 ), DBCS( 더블 바이트 문자 집합 ) 및 MBCS(멀티바이트 문자 집합) 코드 페이지에서도 동일하게 작동합니다.
일반적으로 Windows 애플리케이션은 UTF-16을 내부적으로 사용해야 하며, 다른 형식을 사용해야 하는 인터페이스를 통해 "씬 레이어"의 일부로만 변환해야 합니다. 이 기술은 데이터의 손실 및 손상에 대해 방어합니다. 각 코드 페이지는 서로 다른 문자를 지원하지만 유니코드에서 제공하는 전체 문자 스펙트럼을 지원하지는 않습니다. 대부분의 코드 페이지는 서로 다른 인코딩된 여러 하위 집합을 지원합니다. UTF-8 및 UTF-7의 코드 페이지는 완전한 유니코드 문자 집합을 지원하므로 예외이며, 이러한 인코딩과 UTF-16 간의 변환은 무손실입니다.
한 코드 페이지에서 사용하는 인코딩에서 다른 코드 페이지에서 사용하는 인코딩으로 직접 변환된 데이터는 손상될 수 있습니다. 다른 코드 페이지의 동일한 데이터 값이 다른 문자를 인코딩할 수 있기 때문입니다. 애플리케이션이 가능한 한 인터페이스에 가깝게 변환하는 경우에도 처리할 데이터 범위에 대해 신중하게 고려해야 합니다.
유니코드에서 코드 페이지로 변환된 데이터는 데이터가 손실될 수 있습니다. 지정된 코드 페이지가 특정 유니코드 데이터에 사용되는 모든 문자를 나타내지 못할 수 있기 때문입니다. 따라서 대상 코드 페이지에서 유니코드 문자열의 모든 문자를 나타낼 수 없는 경우 WideCharToMultiByte 에서 일부 데이터가 손실될 수 있습니다.
유니코드를 사용하도록 코드 페이지 기반 레거시 애플리케이션을 현대화하는 경우 제네릭 함수와 TEXT 매크로를 사용하여 두 버전의 애플리케이션을 컴파일할 단일 원본 집합을 유지할 수 있습니다. 한 버전은 유니코드를 지원하고 다른 버전은 Windows 코드 페이지에서 작동합니다. 이 메커니즘을 사용하면 변환의 모든 단계에서 컴파일, 빌드 및 테스트할 수 있는 애플리케이션 원본을 유지하면서 매우 큰 애플리케이션을 Windows 코드 페이지에서 유니코드로 변환할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
유니코드 문자 및 문자열은 코드 페이지 기반 문자 및 문자열의 데이터 형식과 구별되는 데이터 형식을 사용합니다. 이러한 구분은 일련의 매크로 및 명명 규칙과 함께 두 가지 유형의 문자 데이터를 실수로 혼합할 가능성을 최소화합니다. 유니코드 매개 변수 값만 유니코드 문자열이 필요한 함수와 함께 사용되는지 확인하기 위해 컴파일러 형식 검사를 용이하게 합니다.