UTF-8 인코딩시 MSB의 역할을 알아보자

MSB란?

MSB란 “Most Significant Bit” 의 약자로, 가장 상위 비트를 가리키는 용어입니다.

예를 들어

0xxxxxxx 1xxxxxxx

위와 같이 2byte 데이터가 있을 때 01이 각 Byte의 MSB가 됩니다.


유니코드를 UTF8 인코딩시 예시

유니코드는 언어를 1~4byte 가변적으로 표현하게됩니다. ASCII 의 경우 1byte 로 모두 표현되며 그 외 범위는 2~4byte를 사용하게됩니다.

이때, 사용되는 byte 크기별 예시를 들어보겠습니다.

0xxxxxxx (1byte)
110xxxxx 10xxxxxx (2byte)
1110xxxx 10xxxxxx 10xxxxxx (3byte)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (4byte)

MSB의 위치와 역할

위 예시에서 MSB 는 byte단위로(8bit) 가장 왼쪽에 존재하는 비트입니다. 역할로는 현재 문자열을 인코딩할 시 필요한 옥텟의 수를 의미합니다

잠깐! 옥텟이란? utf8 인코딩 시 byte단위(8bit) 로 구역을 분리하는데 이를 옥텟 이라고 합니다. 예를들얼 '가' 라는 한글자를 표현하기 위해서는 3바이트가 필요하게 되는데, 이를 3옥텟 이라고 할 수 있습니다.


1byte

0xxxxxxx

여기서 MSB는 0인데, 이는 추가적으로 필요한 옥텟이 존재하지 않음을 나타냅니다


2byte

110xxxxx 10xxxxxx

각 옥텟 별로 분리해서 보겠습니다

첫번째 옥텟

110xxxxx

여기서 MSB110 까지 읽어야하는데, 11은 해당 문자가 총 2옥텟 사이즈 임을 나타냅니다. 0문자열의 사이즈(옥텟크기)를 나타내는 비트 영역과 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.

두번째 옥텟

10xxxxxx

여기서 MSB10 까지 읽어야하며, 1은 이 옥텟이 다른 옥텟과 이어지는 옥텟 이라는 것을 의미합니다. 여기서는 첫번째 옥텟과 이어짐을 나타내게 됩니다. 0은 첫번째 옥텟과 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.


3byte

110xxxxx 10xxxxxx 10xxxxxx

각 옥텟 별로 분리해서 보겠습니다

첫번째 옥텟

1110xxxx

여기서 MSB1110 까지 읽어야하는데, 111은 해당 문자가 총 3옥텟 사이즈 임을 나타냅니다. 0문자열의 사이즈(옥텟크기)를 나타내는 비트 영역과 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.

두번째 옥텟

10xxxxxx

2byte부분에서 설명했던 내용과 동일합니다. 여기서도 MSB10 까지 읽어야하며, 1은 이 옥텟이 다른 옥텟과 이어지는 옥텟 이라는 것을 의미합니다. 여기서는 첫번째 옥텟과 이어짐을 나타내게 됩니다. 0은 첫번째 옥텟과 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.

세번째 옥텟

10xxxxxx

두번째 옥텟 설명부와 동일합니다. 약간 다른 것은 첫번째 비트 1두번째 옥텟과 이어짐을 나타내게 됩니다. 0은 역시나 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.


4byte

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

위에서 설명한 내용과 동일하여 생략합니다.