Today I Learned

유니코드 변환 형식 8비트(UTF-8) 본문

컴퓨터 구조

유니코드 변환 형식 8비트(UTF-8)

처니형 2022. 8. 29. 11:15

컴퓨터는 7비트값을 처리하도록 설계되지 않았기 때문에 8비트를 사용해 아스키 문자를 저장한다. 8비트만 사용하면 모든 문자를 표현할 수 있기 때문에 굳이 16비트를 사용해 비트를 낭비하지 않는다.

유니코드는 문자 코드에 따라 각기 다른 인코딩을 사용해 이런 문제를 해결한다. 인코딩(Encoding)은 다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴을 뜻한다. 

우리는 비트 같은 추상화를 사용해 숫자를 표현하고, 숫자를 사용해 문자를 표현하며, 다시 다른 숫자를 사용해 문자를 표현하는 숫자를 표현한다.

유니코드 변환 형식 8비트(Unicode Transformation Format-8 bit)는 인코딩 방법이 하위 호환성과 효율성 때문에 가장 널리 쓰이고 있다. UTF-8은 모든 아스키 문자를 8비트로 표현하기 때문에 아스키 데이터를 인코딩할 때는 추가 공간이 필요하지 않다. 그리고 UTF-8은 아스키가 아닌 문자의 경우 아스키를 받아서 처리하는 프로그램이 깨지지 않는 방법으로 문자를 인코딩한다.

UTF-8은 문자를 8비트 덩어리{이를 옥텟(octet)이라고 부른다.}의 시퀀스로 인코딩한다. 

UTF-8에서 교묘한 부분은 첫 번째 덩어리(8비트)의 MSB(Most Significant Bit, 최상위 비트)쪽에 있는 비트들이 8비트 덩어리(옥텟) 시퀀스의 길이를 표현하고, (MSB 쪽의 비트 패턴이 겹치지 않아서) 덩어리의 맨 앞을 식별하기 쉽다는 데 있다. 프로그램이 문자 경계를 찾아야 하는 경우 이런 특성이 아주 유용하다. 

모든 아스키 문자는 7비트에 들어가기 때문에 덩어리를 하나만 사용해 표현할 수 있다. 영어의 경우 비 아스키 기호를 사용하는 언어보다 더 적은 용량으로 문자를 인코딩할 수 있기 때문에 영어 사용자에게는 이런 특성이 아주 편리하다.

출처: https://namu .wiki/w/UTF-8

그림에서 A라는 문자의 숫자 코드가 아스키와 유니코드에서 같다는 사실을 알 수 있다. A를 UTF-8로 인코딩할 때, 7비트 안에 문자의 코드(16비트를 표현할 때 0x0000~0x007f가 이 범위에 속한다)가 들어가면 UTF-8 인코딩에서는 덩어리를 하나만 사용하며 MSB를 0으로 설정한다. 그래서 A라는 문자를 UTF-8로 표현한 그림의 맨 앞에 0이 하나 추가된다.

다음으로는 π(그리스 문자 파이) 기호의 유니코드가 있다. 이 값은 7비트에 들어가지 않지만 11비트로는 표현할 수 있다(16비트로 표현할 때 0x0080~0x07ff가 이 범위에 속한다). π를 UTF-8로 표현하려면 2개의 8비트 덩어리를 사용하되 첫 번째 덩어리의 MSB 3비트를 110으로 시작하고 두 번째 덩어리의 MSB 2비트는 10으로 시작한다.

이렇게 하면 첫 번째 덩어리에는 5비트가 남고, 두 번째 덩어리에는 6비트가 남아서 11비트 코드를 모두 담을 수 있다. 마지막으로 ♣(검은 클로버) 기호를 볼 수 있다. 이 기호의 코드는 16비트에 들어가기 때문에 UTF-8 덩어리를 3개 사용해 표현한다.

'컴퓨터 구조' 카테고리의 다른 글

색을 표현하는 방법  (0) 2022.08.29
URL 인코딩  (0) 2022.08.25
베이스64 인코딩  (0) 2022.08.25
Comments