본문 바로가기

IT/기타

UNICODE와 UTF에 대해서

유니코드는 전세계 사람이 사용하는 거의 모든 언어를 bit로 표현된 숫자로 매핑한 것(=문자 집합, character set)을 의미합니다.

 

초창기에 사용된 아스키 코드는 영어 표기만을 위한 것이었으므로,  다른 나라의 언어를 표현하기엔 크기가 부족했습니다.

때문에 각자의 아스키 코드를 확장해서 자신의 언어를 표준화시키다보니 다양한 표준이 등장했고, 이는 다른 곳에서 실행하면 문자가 깨지는 문제를 발생시켰습니다.

 

그래서 등장한 게 유니코드입니다.

유니코드는 전 세계 언어의 문자를 표현하기 위한 국제 표준 코드입니다.

 

bit로 표현된 숫자를 index라 하고, code point 또는 code unit으로도 불립니다.

예를들어, '가'는 0xac00이라는 인덱스(=코드 포인트)를 가집니다.

 

유니코드 인코딩 방식

문자 인코딩은 문자 집합을 컴퓨터의 언어로 변경시켜 주는 것을 말합니다.

여기서는 유니코드가 가진 문자 집합을 컴퓨터의 언어로 변경시켜주는 것을 의미합니다.

 

문자 인코딩 과정

유니코드 인코딩 방식은 다양하지만, 그 중 가장 많이 쓰이는 UTF에 대해 알아보겠습니다.

 

UTF

: Unicode Transformation Format의 약어로, 유니코드를 인코딩하는 방법입니다.

즉, 유니코드라는 문자 집합을 UTF라는 문자열 인코딩 규칙으로 표현하는 것입니다.

 

UTF에는 대표적으로 UTF-8과 UTF-16이 있습니다.

동일한 유니코드 문자 인코딩 방식이지만,

UTF-X의 X는 몇 bit를 사용하여 인덱스를 표현하는 것인지를 알려줍니다.

 

 

1. UTF-8

: 1개의 인덱스(=코드 포인트)를 8bit로 나타냅니다.

 

UTF-8은 가변 길이 인코딩으로, 하나의 문자를 표현하는데 1byte ~ 4byte까지 가능합니다.

가변 길이 인코딩이란, 글자마다 byte 길이가 다른 것을 말합니다.

영어의 경우, 하나당 1byte이며 1byte 영역아스키 코드와 하위 호환성을 가집니다.

때문에 기존 아스키 코드로 구축된 사이트들을 별다른 처리없이 그대로 쓸 수 있다는 장점이 있습니다.

 

한글, 한자의 경우에는 하나당 3byte를 가집니다.

또한 엔디안에 상관없이 똑같이 읽기 때문에 하위 인코딩이 필요하지 않습니다.

 

 

2. UTF-16

: 1개의 인덱스(=코드 포인트)를 16bit로 나타냅니다.

UTF-16 또한 가변 길이 코딩으로, 하나의 문자를 표현하는데 2byte ~ 4byte까지 가능합니다.

 

영어뿐만 아니라 한글, 한자2byte를 가집니다.

하지만 하위 방식이 존재하기 때문에 디코딩시에 UTF-16의 어떤 하위 인코딩을 사용했는지 BOM을 확인해야합니다.

BOM이란, 유니코드에서 엔디안을 구별하기 위해 문서의 맨 앞에 작성되는 문자입니다.

 

가장 많이 사용되는 UTF-8

요즘은 왜 UTF-8이 많이 사용될까요?제 생각엔 다른 인코딩 방식보다 장점이 많기 때문이라고 생각합니다.UTF-8의 장점은 다음과 같습니다.

  • 다국어를 표현할 수 있습니다.
  • 1byte 영역은 아스키 코드와 같기 때문에 아스키 코드를 그대로 사용할 수 있습니다.
  • 하위 인코딩이 필요하지 않습니다.

 

물론, 영어가 아닌 한글, 한자를 사용하는 경우엔 문자당 3byte를 사용하기 때문에 UTF-16이 더 우세할 수 있습니다. 

 

 


따라서 정리하자면,

  • 유니코드는 아스키 코드가 다국어를 지원하지 못하기 때문에 각자의 언어로 확장하여 인코딩하다보니 충돌이 발생했고, 이를 해결하기 위해 유니코드가 등장했습니다.
  • 유니코드는 문자 집합(Character Set), UTF는 유니코드 문자를 기계어로 변환하는 인코딩 방식입니다.
  • 자주 사용되는 것은 UTF-8이지만, 쓰이는 언어에 최적인 인코딩 방식을 사용하면 됩니다.

잘못된 정보가 있거나, 다른 의견이 있으시다면 피드백 부탁드립니다. 감사합니다 :)