유니코드 문자 인코딩

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

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

유니코드는 인코딩되는 데이터의 데이터 유형에 따라 두 개의 인코딩 양식(8비트 및 16비트)을 사용합니다. 기본 인코딩 양식은 16비트로, 각 문자는 16비트(2바이트)이며 보통 U+hhhh로 표시됩니다(여기서, hhhh는 문자의 16진 코드 포인트입니다. 65,000개 이상의 코드 요소 결과로도 세계 주요 언어의 문자 대부분을 인코딩할 수 있을 정도로 충분하지만 유니코드 표준은 무려 백만 개가 넘는 문자를 인코딩할 수 있는 확장 메커니즘도 제공합니다. 확장 메커니즘은 한 쌍의 상/하위 대리 문자를 사용하여 하나의 확장 또는 보조 문자를 인코딩합니다. 첫 번째(또는 상위) 대리 문자는 U+D800에서 U+DBFF 사이의 코드 값을 가지며, 두 번째(또는 하위) 대리 문자는 U+DC00에서 U+DFFF 사이의 코드 값을 갖습니다.

UCS-2

국제 표준화 기구(ISO) 및 국제 전기 기술 위원회(IEC) 10646 표준(ISO/IEC 10646)은 16비트(2바이트) 버전(UCS-2)과 32비트(4바이트) 버전(UCS-4)의 UCS(Universal Multiple-Octet Coded Character Set)를 지정합니다. 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 문자에 대리 쌍을 통해 액세스할 수 있는 백만 개의 문자를 더한 것입니다.

16비트 유니코드 문자를 바이트로 직렬화할 때 어떤 프로세서는 최상위 비트를 처음 위치에 배치(빅 엔디안(big-endian) 순서라고 함)하는 반면 다른 프로세서는 최하위 비트를 먼저 배치(리틀 엔디안(little-endian) 순서라고 함)합니다. 유니코드의 기본 바이트 순서는 빅 엔디안(big-endian)입니다.

UTF-8

16비트 유니코드 문자는 바이트 지향 ASCII 기반 애플리케이션과 파일 시스템에 중요한 문제점을 제기합니다. 예를 들어, 비유니코드 인식 애플리케이션은 대문자 'A'(U+0041)의 선행 8개 영(0) 비트를 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이 됩니다.