UTF-16
위키백과, 무료 백과사전
Remove ads
위키백과, 무료 백과사전
UTF-16(16-bit Unicode Transformation Format)은 유니코드 문자 인코딩 방식의 하나이다. 주로 사용되는 기본 다국어 평면 (BMP, Basic multilingual plane)에 속하는 문자들은 그대로 16비트 값으로 인코딩이 되고 그 이상의 문자는 특별히 정해진 방식으로 32비트로 인코딩이 된다.
언어 | 국제 |
---|---|
표준 | 유니코드 표준 |
분류 | 유니코드 변환 포맷, 가변 너비 인코딩 |
상위 인코딩 | UCS-2 |
변환 / 암호 | ISO 10646 (유니코드) |
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비트씩 두조각을 내서 상위 서러게이트와 하위 서러게이트에 배정한 것이다.
여기서 다음을 만족한다.
이 방법으로 UTF-16 인코딩이 가능한 유니코드 문자의 범위가 나온다.
zzzzz=00000 이라면, 문자는 16비트 이하로 표현이 가능하다. 즉, U+00xxxx 그대로 대응되는 값을 써주면 된다. 그렇지 않다면, ZZZZ=0000..1111 이 되며,zzzzz=00001..10000 = U+01xxxx .. U+10xxxx
이 두 개의 서러게이트 문자는 상위 서러게이트, 하위 서러게이트로서 전송이 된다. 이 방법으로 U+10FFFF 까지의 문자를 인코딩 할 수 있다.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.