UTF-16
![]() UCS-2 등의 기본 다언어 플레인(Basic Multilingual Plane) 차트. (확대하려면 클릭) | |
언어 | 국제 |
---|---|
표준 | 유니코드 표준 |
분류 | 유니코드 변환 포맷, 가변 너비 인코딩 |
상위 인코딩 | UCS-2 |
변환 / 암호 | ISO 10646 (유니코드) |
유니코드 |
---|
부호화 형식 |
UCS |
양방향 텍스트 |
BOM |
한중일 통합 한자 |
유니코드 범위 목록 |
유니코드 등가성 |
유니코드와 HTML |
유니코드와 전자 우편 |
유니코드 글꼴 |
UTF-16(16-bit Unicode Transformation Format)은 유니코드 문자 인코딩 방식의 하나이다. 주로 사용되는 기본 다국어 평면 (BMP, Basic multilingual plane)에 속하는 문자들은 그대로 16비트 값으로 인코딩이 되고 그 이상의 문자는 특별히 정해진 방식으로 32비트로 인코딩이 된다.
UTF-16은 유니코드 컨소시엄과 ISO/IEC 10646에 의해 정의되어 있다. 유니코드는 거기에 추가적인 내용을 정하고 있다. 정확한 차이점은 유니코드 4.0 표준의 부록편 C 부분이 자세히 기술되어 있다. ISO 표준은 UCS-2 인코딩도 정의하며 여기선 BMP의 16비트 표현만을 다룬다.
기본 다국어 평면은 U+0000에서 U+FFFF 에 놓인 문자를 담고 있다. 이 영역에는 우리가 쉽게 생각할 수 있는 문자들이 포함되며, 한글, 한자 등은 모두 여기에 포함되어 있다. 이 영역에는 서러게이트 문자(surrogate)들이 준비되어 있어 16비트 이상의 문자를 표현할 때를 대비해 놓았다.
기본 다국어 평면의 문자들은 곧바로 16비트 값으로 대응되어 인코딩되며, 이 경우에는 인코딩된 바이트 스트링의 엔디언만 조심하면 된다.
UTF-16-문자
Bit |15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |y y y y y y y y|x x x x x x x x| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
UTF-16BE-코드
첫 번째 Byte 두 번째 Byte |7 0| |7 0| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |y y y y y y y y| |x x x x x x x x| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
UTF-16LE-코드
첫째 Byte 두 번째 Byte |7 0| |7 0| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |x x x x x x x x| |y y y y y y y y| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
기본 다국어 평면에 포함되지 않는 문자들, 즉 16비트로 값을 표현할 수 없는 문자들은 서러게이트(Surrogate) 문자 영역에 해당하는 두 개의 16비트 문자로 변환되어 이 한 쌍(즉 32비트)이 그 문자를 나타내게 된다. 그 자세한 방식은 다음 그림을 통해 설명한다.
Bit 31 24|23 16|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 0 0|0 0 0 z z z z z|x x x x x x y y|y y y y y y y y| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
High-Surrogate (U+D800 ... U+DBFF)
|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1 1 0 1 1 0 Z Z|Z Z x x x x x x| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Low-Surrogate (U+DC00 ... U+DFFF)
|15 8|7 0| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |1 1 0 1 1 1 y y|y y y y y y y y| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
유니코드 문자 영역에서 상위 서러게이트는 U+D800에서 U+DBFF 까지의 값을 갖는다. 즉 최상위비트 6개의 값이 그림에서 보듯이 110110으로 일정하다. 마찬가지로 하위 서러게이트는 U+DC00에서 U+DFFF 까지의 값을 가지며 최상위비트 6개의 값은 110111 이 된다. 각 서러게이트 문자는 하위 10비트씩의 자유도를 갖는다. 따라서 주어진 문자를 10비트씩 두조각을 내서 상위 서러게이트와 하위 서러게이트에 배정한 것이다.
여기서 다음을 만족한다.
- ZZZZ=zzzzz-1.
이 방법으로 UTF-16 인코딩이 가능한 유니코드 문자의 범위가 나온다.
zzzzz=00000 이라면, 문자는 16비트 이하로 표현이 가능하다. 즉, U+00xxxx 그대로 대응되는 값을 써주면 된다. 그렇지 않다면, ZZZZ=0000..1111 이 되며,zzzzz=00001..10000 = U+01xxxx .. U+10xxxx
이 두 개의 서러게이트 문자는 상위 서러게이트, 하위 서러게이트로서 전송이 된다. 이 방법으로 U+10FFFF 까지의 문자를 인코딩 할 수 있다.
예시
[편집]코드 점 | 문자 | UTF-16 코드 값 | 글리프 |
---|---|---|---|
122 (hex 7A) | 소문자 Z(로마자) | 007A | z |
27700 (hex 6C34) | 물 수(한자) | 6C34 | |
119070 (hex 1D11E) | 높은음자리표 | D834 DD1E | 𝄞 (![]() |
인코딩 | 바이트 순서 | 바이트 열 |
---|---|---|
UTF-16LE | 리틀 엔디언 | 34 6C, 7A 00, 34 D8 1E DD |
UTF-16BE | 빅 엔디언 | 6C 34, 00 7A, D8 34 DD 1E |
UTF-16 | 리틀 엔디언, with BOM | FF FE, 34 6C, 7A 00, 34 D8 1E DD |
UTF-16 | 빅 엔디언, with BOM | FE FF, 6C 34, 00 7A, D8 34 DD 1E |
같이 보기
[편집]외부 링크
[편집]- Unicode Standard 4.0 Chapter 2 (PDF) 일반 구조. UTF-16는 2.5 Encoding Forms (S.20) 에 정의되어 있다.
- Unicode TN12: UTF-16 for Processing