인코딩과 문자 집합/UTF/16

위키책, 위키책

UTF-16은 유니코드 인코딩의 하나이다.

기본 다국어 평면은 U+0000 에서 U+FFFF 에 놓인 문자가 포함되며, 대행 문자가 있어 U+10FFFF까지 인코딩 할 수 있다.

기본 다국어 평면의 문자들은 곧바로 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-16 빅 엔디안

    첫 번째 Byte         두 번째 Byte
|7             0| |7             0|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|y y y y y y y y| |x x x x x x x x|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+

UTF-16 리틀 엔디안

    첫째 Byte          두 번째 Byte
|7             0| |7             0|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|x x x x x x x x| |y y y y y y y y|
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+


기본 다국어 평면에 포함되지 않는 문자들은 상행 대행문자와 하행 대행문자의 쌍으로 나타내어 진다.

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 x x|x x 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비트 만큼 있다.

여기서, U+10000및 그 이후의 문자는 16진수 값에 10000(16)을 뺀 값을 20비트로 나타낸뒤 10비트로 쪼개서 배열한다. 주의할 것은 위의 표기는 빅 엔디안 기준이라는 것이다.

엔디안의 구별[+/-]

엔디안은 문서 앞에서 U+FEFF를 붙여구별한다.

유니코드에서 U+FFFE는 엔디안의 구별을 위해 사용하지 않는 코드로 되어 있으므로 이를 바로잡을 수 있다.