문자들을 Code Point에 대응시켜 만든 코드화된 문자들의 집합이다.
Code Point는 Character의 식별자가 된다.
CCS를 8bit 집합에 대응시키는 것 이다.
CCS와 CES는 1:1로 대응된다.
흔히 말하는 인코딩에 해당한다.
UTF-8, UTF-16, euc-kr, CP949 등
인코딩한 문자가 특정 프로토콜을 타고 전송되도록 변환하는 것 이다.
통신 프로토콜에 제약이 있을 수 있기 때문이다.
URL Encoding, Base 64 Encoding 등
위의 3가지 개념을 합친 개념이 유니코드이다.
유니코드가 없을 때도 각 나라들은 알아서 자국 문자를 잘 표현했다.
하지만 다양한 나라가 서로 다른 인코딩 방식을 사용하여 호환성 및 확장성 문제가 생기게 되었다.
결국 전 세계 문자를 컴퓨터에서 다룰 수 있도록 만든 표준 시스템이 유니코드이다.
대부분의 문자를 포함하여 이모티콘도 포함이 되어진다.
코드 포인트 범위 - 0x0 ~ 0x10FFFF (1114112개 문자 표현)
유니코드가 2Byte 범위로 사용된다는 것은 잘못된 오해이며 실제로는 4Byte 영역까지 사용한다.
흔히 쓰이는 문자들을 포함하는 영역을 BMP 영역이라 부르며 이 영역에 존재하지 않는 문자들은 자주 사용하지 않는 문자들로 분류가 되어진다. 우리가 자주 사용하는 이모티콘 역시 BMP 영역에 존재하지 않는다.
Surrogate Pair 방법을 이용해 2 Byte 보다 큰 문자를 표현한다.
Surrogate Pair ?
2 Byte 문자 두 개를 가지고 문자를 표현하는 형식으로 BMP 영역에 존재하는 Surrogate 보조 문자와 BMP 영역 외부에 존재하는 문자를 합쳐 하나의 문자를 표현한다.
Code Point가 어떤 단위로 조합되어 인코딩이 이루어지는 것에 대한 정의
유니코드는 여러가지 방식으로 인코딩이 가능하며 대표적으로 UTF 계열이 존재한다.
UTF - N의 형태이며, N에 들어있는 숫자의 단위로 인코딩 되는지를 나타낸다.
보통 웹 문서는 크기를 줄이기 위해 UTF-8로 주로 인코딩을 이룬다.
각각의 UTF는 서로 다른 특징이 존재하며 바이트 순서도 다르며 BOM 허용 여부도 다르다.
Big-Endian과 Little-Endian은 컴퓨터 메모리에 저장된 바이트의 순서를 말한다.
Big-Endian : 메모리가 큰 쪽에서 작은 쪽으로 저장하며 사람이 읽는 순서와 같아 사람이 보기 편하다.
Little-Endian : 메모리가 작은 쪽에서 큰 쪽으로 저장하며 하위 바이트만 계산할 때에 별도 계산이 필요하지 않아 컴퓨터가 사용하기에 더 편하다.
BOM(Byte Order Mark)
바이트 순서를 알 수 있도록 문서 제일 앞에 표시하는 것을 말한다.
이 값을 통해 Endian을 파악할 수 있다.
참고로 UTF-8은 Endiand이 의미 없으므로 BOM 허용 여부가 상관 없다.
유니코드에서 이모티콘은 4 Byte (Surrogate Pair)로 문자 길이를 2칸 차지 하고 , 영어와 한글은 2 Byte로 읽혀 한 글자당 문자 길이를 1칸 차지 합니다. (console 창에 문자를 변수로 저장한 후 length를 확인해보자)