UTF-8 인코딩시 MSB의 역할을 알아보자
MSB란?
MSB란 “Most Significant Bit” 의 약자로, 가장 상위 비트를 가리키는 용어입니다.
예를 들어
0xxxxxxx 1xxxxxxx
위와 같이 2byte 데이터가 있을 때 0
과 1
이 각 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
여기서 MSB는 110
까지 읽어야하는데,
11
은 해당 문자가 총 2옥텟 사이즈 임을 나타냅니다.
0
은 문자열의 사이즈(옥텟크기)를 나타내는 비트 영역과 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.
두번째 옥텟
10xxxxxx
여기서 MSB 는 10
까지 읽어야하며,
1
은 이 옥텟이 다른 옥텟과 이어지는 옥텟 이라는 것을 의미합니다.
여기서는 첫번째 옥텟과 이어짐을 나타내게 됩니다.
0
은 첫번째 옥텟과 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.
3byte
110xxxxx 10xxxxxx 10xxxxxx
각 옥텟 별로 분리해서 보겠습니다
첫번째 옥텟
1110xxxx
여기서 MSB는 1110
까지 읽어야하는데,
111
은 해당 문자가 총 3옥텟 사이즈 임을 나타냅니다.
0
은 문자열의 사이즈(옥텟크기)를 나타내는 비트 영역과 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.
두번째 옥텟
10xxxxxx
위 2byte부분에서 설명했던 내용과 동일합니다.
여기서도 MSB 는 10
까지 읽어야하며,
1
은 이 옥텟이 다른 옥텟과 이어지는 옥텟 이라는 것을 의미합니다.
여기서는 첫번째 옥텟과 이어짐을 나타내게 됩니다.
0
은 첫번째 옥텟과 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.
세번째 옥텟
10xxxxxx
두번째 옥텟 설명부와 동일합니다. 약간 다른 것은
첫번째 비트 1
이 두번째 옥텟과 이어짐을 나타내게 됩니다.
0
은 역시나 마찬가지로 실제 문자열을 표시하는 데이터 영역을 구분해줍니다.
4byte
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
위에서 설명한 내용과 동일하여 생략합니다.