Info
해당 글에서는 UTF-8가 데이터를 어떻게 인코딩하는지에 대해서 알아본다. UTF-8 (Unicode Transformation Format - 8-bit)
개념
첨부한 링크에서 발췌한 방식은 다음과 같다. (RFC 3629)
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
| 유니코드 값 범위 (16진수) | UTF-8 바이트 시퀀스 (2진수) |
|---|---|
U+0000 - U+007F | 0xxxxxxx |
U+0080 - U+07FF | 110xxxxx 10xxxxxx |
U+0800 - U+FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
U+10000 - U+10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 표 왼쪽에 위치한 데이터는 유니코드 데이터를 의미하고 |
오른쪽에 위치한 데이터는 실제로 저장되는 데이터를 의미한다.
이때, 오른쪽 데이터에서 표기된 x들은 실제 유니코드 값을 의미한다.
예시
실제 예제를 보면서 보다 자세하게 살펴보자.
확장 아스키인 °를 온도 혹은 각도 표시를 위해서 사용한다고 해보자. 이는 유니코드 U+00B0의 값을 가진다.
따라서 표의 2번째에 해당하고 다음과 같은 실제 데이터로 저장된다.
11000010 10110000
총 2바이트의 값을 가지고 16진수로 표기하면 다음과 같다.
0xC2 0xB0
운 좋게 뒤의 1바이트가 맞아떨어져서 뒤의 바이트는 유니코드 값과 일치하게 되었지만, 모든 경우에서 동작하지 않는다.
참고 링크
https://datatracker.ietf.org/doc/html/rfc3629 https://www.ascii-code.com/