[CS] UTF-8, 16, 32 차이점??

윤동환·2023년 3월 20일
0

Computer Science

목록 보기
2/10
post-thumbnail

유니코드란?

유니코드(영어: Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준입니다.

유니코드 변환 형식

  1. 유니코드 변환 형식(Unicode Transformation Format, UTF) 인코딩
  2. 국제 문자 세트(Universal Coded Character Set, UCS) 인코딩.

인코딩?
어떠한 정보, 데이터를 다른 형식으로 변환시키는 것을 의미한다.

왜 인코딩을 하는가??
1. 데이터 표준화
2. 저장 공간 절약
3. 처리 속도 향상
4. 보안 등...

유니코드 변환 순서
1. 유니코드 표에서 인코딩하려는 문자의 코드를 찾는다.
2. 코드를 각 인코딩 방식에서 정해둔 규칙에 따라 변형시켜 바이터열에 표현한다.

UTF-8(Unicode Transformation Format - 8bit)

UTF-8은 가장 많이 사용되는 가변 길이 유니코드 인코딩입니다.
켄 톰슨과 롭 파이크(Go 언어를 만든 사람)가 만들었습니다.
문자의 코드가 속한 범위에 따라 1~4바이트로 인코딩하는 가변길이 인코딩 방식입니다.

총 코드 페이지는 65001로써 최대 6바이트까지 표현이 가능합니다.
하지만 다른 인코딩과의 호환을 위해 4바이트까지만 사용합니다.
유니코드는 U+10FFFF까지(1,114,111) 이용합니다. utf-8의 경우 가변바이트 길이 비트를 제외하고도 2,097,151까지 인코딩 가능하여 4바이트만으로도 충분합니다.

장점

  1. 기존의 HTML 태그나 자바스크릅트 등 아스키로 구축된 사이트를 포팅작업(변환처리)없이 그대로 쓸 수 있습니다.
  2. 엔디안과 상관없이 똑같이 읽을 수 있어 크로스플랫폼 호환성도 뛰어납니다. (빅엔디안 고정)
  3. C로 작성된 Unix 프로그램 호환성이 좋스비다.
  4. 단일 인코딩 방식으로 대부분의 국가에서 공통적으로 사용할 수 있습니다.
  5. BOM이 불필요합니다. 등,,

UTF-16

유니코드 한 문자를 표현하기위해 2~4바이트가 필요한 가변길이 인코딩 방식입니다. (한글, 영문 2바이트)

장점

UTF-8를 사용하면 한글이 3바이트영역에 집중되어있는 반면 16의 경우 2바이트에 집중되어있어 UTF-8보다 용량적으로 장점이 있다.

단점

  1. 인코딩에 여러 하위 방식이 존재해서 읽을 때 마다 그냥 UTF라고 하면 디코딩이 안되었고, 대표적 문제는 endian이었습니다. endian이 달라 다른 글자가 튀어나오는 문제를 해결하기 위해 BOM(Byte Order Mark)을 붙이도록 하여 문제를 해결하였습니다.
  2. UTF-16의 하위호환인 UCS-2는 SMP영역의 문자가 포함된 UTF-16문서를 읽으면 문제가 생긴다. 이러한 문제 때문에 UTF-8의 단일 인코딩 방식이 각광받게됩니다. (이땐 애플이나 MS에서 URF-16으로 유니코드/국제화 지원을 다 만들어 두어서 16을 고수하였으나, 현재 애플은 UTF-8로 넘어갔고, MS는 window10이후 넘어가려하나 호환성 때문에 완벽하게 넘어가진 못하고 있다.)
  3. ANSI와 호환되지 않는다.

UCS-2가 사용되지 않는 이유
UCS-2는 유니코드 표의 supplementary 또는 'astral' 을 지원하지 않도록 설계되었기 때문이다.
UTF-16은 UCS-2의 후속 버전이다. 10FFFFh 또는 1,114,112 코드 포인트의 총 최대 문자 수에 대해 기본 및 16개의 보조 평면을 처리할 수 있다.

SMP(Supplementary Multilingual Plane)
보조 다국어 평면. 유니코드에서 BMP 다음에 위치해 있는 영역으로 U+10000 ~ U+1FFFF에 속하는 코드 번호를 부여받는다. 여기에 있는 글자를 UTF-8로 표현하면 죄다 4바이트 크기이다. 웹상에서 쐐기 문자를 쓰거나 악보를 그릴 일이 없는 한 잘 쓰이지 않는 영역이었어야 했으나 이모지의 도래로 꽤 많이 쓰이게 되었다. 그리고 BMP만 지원하는 환경에는 사망 선고가 내려졌다.

UTF-32

모든 문자를 4바이트(32비트) 고정 길이로 인코딩합니다.

장점

  1. 유니코드의 모든 문자를 색인화 하고있어 인코딩 변환 처리가 따로 필요 없습니다.
  2. 변형 규칙이나 가변길이를 고려하지 않아도 되기때문에 일관성 있고 단순하다는 장점이 있습니다.

단점

  1. 하나의 문자를 저장하는데 많은 공간을 사용합니다.
  2. endian을 고려해야합니다.

요점 정리

  1. UTF-8은 1~4바이트를 사용하며 UTF-16보다 용량을 더 사용할 수 있지만 압축 등 기술의 발전으로 크게 문제되지않는다.
  2. UTF-8은 단일 인코딩 방식으로 어느 나라의 언어든 쉽게 인코딩 할 수 있다. (UTF-32의 경우 메모리를 많이 잡아먹는다.)
  3. UTF-16의 endian문제를 해결하기 위해 BOM을 사용한다.
  4. UTF-8이 가장 많이 사용되는 유니코드 인코딩 방식이다.

EUC-KR?
한글을 표현하기위해 2바이트를 사용하여 한글을 표현하는 인코딩 방식입니다.
EUC-JP도 있으며, 일본과 한국의 언어를 표현하는 비트가 같아 서로 호환이 잘 안되는 경우도 있었습니다. EX) 한국어 가 -> 일본어 ふ(이해를 위한 예시일뿐 정확한 예시는 아닙니다.) 예시처럼 의도치 않은 변환이 일어날 수 있었습니다.
이를 해결하기 위해 유니코드가 나왔고, 유니코드를 기반이로 인코딩하는 UTF-8인코딩 방식이 현재 널리 쓰이고있다.

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글