[CS] 유니코드에 대하여

Logun·2023년 10월 11일
0

CS

목록 보기
15/17
post-thumbnail

🧨 알아두어야할 기본 지식


CSS (Coded Character Set)

  • 문자들을 Code Point(정해놓은 정수 값)에 대응시켜 만든 코드화된 문자들의 집합
  • Code Point는 Character의 식별자
  • KS C 5601, ISO 10646(국제 표준), US-ASCll

CES (Character Encoding Scheme)

  • CSS를 octet(8bit - 문자열을 표현하는 기본 단위) 집합에 대응시키는 것
  • CCS와 CES는 1:1로 대응
  • 흔히 말하는 인코딩에 해당한다.
    • 인코딩
      Character를 시스템이 인식 할 수 있는 값으로 변환하는 것
    • 디코딩
      인코딩된 값을 다시 Character로 변환하는 것
  • UTF-8, UTF-16, euc-kr, CP949

TES (Transfer Encoding Synctax)

  • 인코딩한 문자가 특정 프로토콜을 타고 전송되도록 변환하는 것
  • 통신 프로토콜에 제약이 있을 수 있기 때문
    • 예를들어, URL에서 공백은 사용할 수 없기에 변환을 해야한다.
  • URL Encoding, BASE64 Encoding

✅ 유니코드


  • 유니코드가 없을 때도 각 나라들은 알아서 자국 문자를 잘 표현하였지만, 다양한 나라가 서로 다른 인코딩 방식을 사용함으로써 호환성 및 확장성에 문제가 생겼다.

  • 결국, 전 세계 문자를 컴퓨터에서 다룰 수 있도록 만든 표준 시스템을 만들었다.

  • 대부분의 문자와 이모티콘이 포함되어 있다.
    유니코드 확인하기

유니코드의 CCS

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

  • 현재 쓰이는 대부분의 문자는 Basic Multilingual Plan(BMP)에있고, 안에 Surrogate Area를 포함한다.

  • 2byte보다 큰 문자열을 사용하기 위해선 Surrogate Pair 방법을 이용해 2바이트보다 큰 문자를 표현한다.
    BMP외부의 문자와 BMP 내부의 Surrogate Area의 보조문자를 결합하여 사용한다.

유니코드의 CES

  • Code Point가 어떤 단위로 조합되어 인코딩되는 지 정의한 것
  • 보통 웹문서는 크기를 줄이기 위해 UTF-8로 인코딩한다

Big-Endian과 Little-Endian

Big-Endian은 사람이 읽고 쓰는법과 같아서 사람이 보기에 편하고, Little-Endian은 하위 바이트만 계산할 때 별도의 계산이 필요없으므로 컴퓨터가 사용하기에 더 편하다.

  • Big-Endian과 Little-Endian은 컴퓨터 메모리에 저장된 바이트의 순서를 말한다.
  • Big-Endian은 큰 쪽에서 작은 쪽으로 저장된다.
  • Little-Endian은 작은 쪽에서 큰 쪽으로 저장된다.

BOM (Byte Order Mark)

  • 문서 제일 앞에 U+FEFF를 삽입하여 어플리케이션이 바이트 순서를 알 수 있게 해준다.
  • 이 값으로 Big-Endian과 Little-Endian을 표현한다.
  • 참고로 UTF-8은 Endian이 의미가 없어 BOM의 유무가 상관없다.

코드로 보는 유니코드

// 다음 이모지는 4바이트로 구성되어 있다.
const poo = "🎉"
console.log(poo.charCodeAt(0).toString(16)) // Code Point -> d83c
console.log(poo.charCodeAt(1).toString(16)) // Code Point -> df89

// \u를 통해 유니코드 문자로 표현할 수 있다.
const unicodePoo = "\ud83c\udf89"

// 둘은 같다.
console.log(poo === unicodePoo);

// 이모지는 문자 길이를 2 차지한다.
console.log(poo.length);

// 유니코드에서 영어든 한글이든 2바이트로 읽힌다.
// 따라서 한글은 한 글자당 길이를 1 차지한다.
console.log("한글".length);
profile
로건의 개발이야기

0개의 댓글