유니코드 문자 인코딩

유니코드 문자 인코딩 표준은 사용 중인 거의 모든 세계 언어의 문자를 포함하는 고정 길이의 문자 인코딩 체계입니다.

유니코드에 대한 정보는 유니코드 표준및 유니코드 컨소시엄 웹 사이트 ( www.unicode.org) 에서 찾을 수 있습니다.

유니코드는 인코딩 중인 데이터의 데이터 유형에 따라 두 가지 인코딩 양식인 8비트및 16비트를 사용합니다. 기본 인코딩 양식은 16비트입니다. 여기서 각 문자의 너비는 16비트 (2바이트) 입니다. 16비트인코딩 양식은 일반적으로 U+hhhh로 표시됩니다. 여기서 hhhh는 문자의 16진코드 포인트입니다. 이 인코딩 양식은 65 ,000개 이상의 코드 요소를 생성하며, 이는 세계 주요 언어의 대부분의 문자를 인코딩하는 데 충분합니다. 유니코드 표준은 1,000 ,000개 이상의 추가 문자 인코딩을 허용하는 확장 메커니즘도 제공합니다. 확장 메커니즘은 한 쌍의 상/하위 대리 문자를 사용하여 하나의 확장 또는 보조 문자를 인코딩합니다. 첫 번째 (또는 높은) 대리 문자의 코드 값은 U+D800 과 U+DBFF 사이입니다. 두 번째 (또는 낮은) 대리 문자의 코드 값은 U+DC00 과 U+DFFF 사이입니다.

UCS-2

ISO (International Organization for Standardization) 및 IEC (International Electrotechnical Commission) 표준 10646 (ISO/IEC 10646) 은 UCS (Universal Multiple-Octet Coded Character Set) 를 지정합니다. 이 문자 세트에는 16비트 (2바이트) 버전 (UCS-2) 및 32비트 (4바이트) 버전 (UCS-4) 이 있습니다. UCS-2는 대리가 없는 유니코드 16비트 양식과 동일합니다. UCS-2 는 유니코드 버전 3.0 레퍼토리에 정의된 모든 (16비트) 문자를 인코딩할 수 있습니다. 유니코드 버전 3.1에서 시작하여 각각의 새 보조 문자를 인코딩하려면 두 개의 UCS-2 문자 (높음 및 낮음 대리) 가 필요합니다. 이러한 보조 문자는 원래 16비트 BMP(Basic Multilingual Plane 또는 Plane 0) 외부에 정의됩니다.

UTF-16

ISO/IEC 10646은 또한 두 개의 UCS-2 문자를 사용하여 일부 UCS-4 문자를 인코딩하기 위한 확장 기술을 정의합니다. UTF-16이라는 이 확장은 대리가 있는 유니코드 16비트 인코딩 양식과 동일합니다. 요약하면, UTF-16 문자 레퍼토리는 모든 UCS-2 문자와 대리 쌍을 통해 액세스할 수 있는 추가 1,000 ,000자로 구성됩니다.

16비트유니코드 문자를 바이트로 직렬화할 때 바이트가 표시되는 순서는 사용 중인 프로세서에 따라 다릅니다. 일부 프로세서는 초기 위치 (빅 엔디안 (big-endian) 순서라고 함) 에 가장 중요한 바이트를 배치하는 반면, 다른 프로세서는 가장 중요하지 않은 바이트를 먼저 배치합니다 (리틀 엔디안 (little-endian) 순서라고 함). 유니코드의 기본 바이트 순서는 빅 엔디안(big-endian)입니다.

UTF-8

16비트 유니코드 문자는 바이트 지향 ASCII 기반 애플리케이션과 파일 시스템에 중요한 문제점을 제기합니다. 예를 들어, 비유니코드 인식 애플리케이션은 대문자 'A' (U+0041) 의 선행 8비트를 1바이트 ASCII NULL 문자로 잘못 해석할 수 있습니다.

UTF-8(UCS 변환 형식 8)은 고정 길이 유니코드 문자를 가변 길이 ASCII 안전 바이트 문자열로 변환하는 알고리즘 변환입니다. UTF-8에서 ASCII 및 제어 문자는 보통 1바이트 코드로 표시되지만 다른 문자는 2바이트 이상입니다. UTF-8 은 비보조 문자와 보조 문자를 모두 인코딩할 수 있습니다.

UTF-8 문자는 최대 4바이트입니다. 비보조 문자의 길이는 최대 3바이트이고 보조 문자의 길이는 4바이트입니다.

UTF-8 형식의 각 UTF-16 문자에 대한 바이트 수는 표 1에서 판별할 수 있습니다.

표 1. UTF-8 비트 분포
코드 값

(2진)

UTF-16

(2진)

첫 번째 바이트

(2진)

두 번째 바이트

(2진)

세 번째 바이트

(2진)

네 번째 바이트

(2진)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

yyxxxxxx

00000yyy

yyxxxxxx

110yyyyy 10xxxxxx    
zzzzyyyy

yyxxxxxx

zzzzyyyy

yyxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuu

zzzzyyyy

yyxxxxxx

110110ww

wwzzzzyy

110111yy

yyxxxxxx

11110uuu

(여기서 uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

앞의 표에 나열된 각 코드 값에서 연속된 u, w, x, y, z는 문자의 비트 표시입니다. 예를 들어, U+0080은 2진 형식의 11000010 10000000으로 변환되며, 대리 문자 쌍 U+D800 U+DC00은 2진 형식의 11110000 10010000 10000000이 됩니다.