유니코드(영어: Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준입니다.
인코딩?
어떠한 정보, 데이터를 다른 형식으로 변환시키는 것을 의미한다.
왜 인코딩을 하는가??
1. 데이터 표준화
2. 저장 공간 절약
3. 처리 속도 향상
4. 보안 등...
유니코드 변환 순서
1. 유니코드 표에서 인코딩하려는 문자의 코드를 찾는다.
2. 코드를 각 인코딩 방식에서 정해둔 규칙에 따라 변형시켜 바이터열에 표현한다.
UTF-8은 가장 많이 사용되는 가변 길이 유니코드 인코딩입니다.
켄 톰슨과 롭 파이크(Go 언어를 만든 사람)가 만들었습니다.
문자의 코드가 속한 범위에 따라 1~4바이트로 인코딩하는 가변길이 인코딩 방식입니다.
총 코드 페이지는 65001로써 최대 6바이트까지 표현이 가능합니다.
하지만 다른 인코딩과의 호환을 위해 4바이트까지만 사용합니다.
유니코드는 U+10FFFF까지(1,114,111) 이용합니다. utf-8의 경우 가변바이트 길이 비트를 제외하고도 2,097,151까지 인코딩 가능하여 4바이트만으로도 충분합니다.
유니코드 한 문자를 표현하기위해 2~4바이트가 필요한 가변길이 인코딩 방식입니다. (한글, 영문 2바이트)
UTF-8를 사용하면 한글이 3바이트영역에 집중되어있는 반면 16의 경우 2바이트에 집중되어있어 UTF-8보다 용량적으로 장점이 있다.
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만 지원하는 환경에는 사망 선고가 내려졌다.
모든 문자를 4바이트(32비트) 고정 길이로 인코딩합니다.
EUC-KR?
한글을 표현하기위해 2바이트를 사용하여 한글을 표현하는 인코딩 방식입니다.
EUC-JP도 있으며, 일본과 한국의 언어를 표현하는 비트가 같아 서로 호환이 잘 안되는 경우도 있었습니다. EX) 한국어 가 -> 일본어 ふ(이해를 위한 예시일뿐 정확한 예시는 아닙니다.) 예시처럼 의도치 않은 변환이 일어날 수 있었습니다.
이를 해결하기 위해 유니코드가 나왔고, 유니코드를 기반이로 인코딩하는 UTF-8인코딩 방식이 현재 널리 쓰이고있다.