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+007F0xxxxxxx
U+0080 - U+07FF110xxxxx 10xxxxxx
U+0800 - U+FFFF1110xxxx 10xxxxxx 10xxxxxx
U+10000 - U+10FFFF11110xxx 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/