유니코드

MyeonghoonNam·2021년 8월 15일
0

기본 개념 - CCS (Coded Character Set)

  • 문자들을 Code Point에 대응시켜 만든 코드화된 문자들의 집합이다.

  • Code Point는 Character의 식별자가 된다.


기본 개념 - CES (Character Encoding Scheme)

  • CCS를 8bit 집합에 대응시키는 것 이다.

  • CCS와 CES는 1:1로 대응된다.

  • 흔히 말하는 인코딩에 해당한다.

    • 인코딩 - Character를 시스템이 인식 할 수 있는 값으로 변환하는 것 이다.
    • 디코딩 - 인코딩 되어진 값을 다시 Character로 변환하는 것 이다.
  • UTF-8, UTF-16, euc-kr, CP949 등


기본 개념 - TES (Transfer Encoding Syntax)

  • 인코딩한 문자가 특정 프로토콜을 타고 전송되도록 변환하는 것 이다.

  • 통신 프로토콜에 제약이 있을 수 있기 때문이다.

    • 예를 들어, URL에서 공백은 사용할 수 없기에 변환을 해야합니다.
  • URL Encoding, Base 64 Encoding 등


유니코드

  • 위의 3가지 개념을 합친 개념이 유니코드이다.

  • 유니코드가 없을 때도 각 나라들은 알아서 자국 문자를 잘 표현했다.

  • 하지만 다양한 나라가 서로 다른 인코딩 방식을 사용하여 호환성 및 확장성 문제가 생기게 되었다.

  • 결국 전 세계 문자를 컴퓨터에서 다룰 수 있도록 만든 표준 시스템이 유니코드이다.

  • 대부분의 문자를 포함하여 이모티콘도 포함이 되어진다.


유니코드 - CCS

  • 코드 포인트 범위 - 0x0 ~ 0x10FFFF (1114112개 문자 표현)

    • 유니코드가 2Byte 범위로 사용된다는 것은 잘못된 오해이며 실제로는 4Byte 영역까지 사용한다.

    • 흔히 쓰이는 문자들을 포함하는 영역을 BMP 영역이라 부르며 이 영역에 존재하지 않는 문자들은 자주 사용하지 않는 문자들로 분류가 되어진다. 우리가 자주 사용하는 이모티콘 역시 BMP 영역에 존재하지 않는다.

  • Surrogate Pair 방법을 이용해 2 Byte 보다 큰 문자를 표현한다.

    Surrogate Pair ?

    2 Byte 문자 두 개를 가지고 문자를 표현하는 형식으로 BMP 영역에 존재하는 Surrogate 보조 문자와 BMP 영역 외부에 존재하는 문자를 합쳐 하나의 문자를 표현한다.


유니코드 - CES

  • 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를 확인해보자)



참고자료

profile
꾸준히 성장하는 개발자를 목표로 합니다.

0개의 댓글