유니코드 문자 인코딩

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

유니코드에 대한 정보는 유니코드 표준 과 유니코드 컨소시엄 웹사이트 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)와 국제전기표준회의(IEC) 표준 10646(ISO/IEC 10646)은 범용 다중 옥텟 부호 문자 집합(UCS)을 규정하고 있습니다. 이 문자 집합에는 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)입니다.

UTF-8

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