UTF-8

Tony·2022년 3월 22일
0

들어가기 전에 아스키 코드와 유니코드에 대해 간단히 알아보는 것이 좋을 것 같다

아스키(ASCII) 코드 vs 유니 코드(Unicode)

아스키 코드 : American Standard Code for Information Interchange

  • 1960년대 미국에서 정의한 표준화한 부호체계
  • 아스키코드는 7비트, 128개의 고유한 값만 사용
  • 1byte는 8bit인데 7bit만 사용하는 이유는 통신 에러 검출을 위해 1bit(Parity bit)를 사용하기 때문
  • 영문 키보드로 입력할 수 있는 모든 가능성을 담았으나
  • 다른 언어를 표현하기에는 7bit로는 부족했다
  • 8bit로 확장한 아스키코드(ANSI 코드)가 나왔다 -> 256개까지 표현 가능
    • 그러나 한국, 중국, 일본 등 문자가 많으 국가에선 여전히 제한적이다
      • 우리나라의 경우 KSC5601 표준이라는 고유한 인코딩 방법으로 문자를 표현
    • 그래서 유니코드(Unicode)라는 전 세계 언어의 문자를 정의하기 위한 국제 표준 코드가 등장

유니코드(Unicode)

  • 용량을 크게 확장한 2byte(2의 16승 = 65,536)의 유니코드가 등장
  • 고어, 토속어 등 모든 문자를 담으려다보니 이 마저도 부족해서,
  • 상위대행(1024자), 하위대행(1024자)로 할당한 뒤 이 둘의 조합으로(1024 * 1024 = 1,048,576) 약 백만자가 넘는 문자를 추가로 정의할 수 있게 됨
  • 유니코드에는 총 110만개가 넘는 코드를 지정할 수 있는데 17개 구역으로 나누었다
    • 110만 / 65,536 ~= 16.78 => 17개 구역
  • 유니코드를 8비트 숫자 집합으로 나타내는 UTF-8이나 16비트 숫자 집합으로 나타내는 UTF-16 등이 문자인코딩 형태로 쓰인다

UTF-8

HTML 파일을 만들 때 ! + tab(Emmet)으로 자동완성되는 템플릿에서 자주봤었던
UTF-8에 대해 공부해보자

위키백과의 정의를 보면
UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나이다.

  • 문자 인코딩 : 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것
    • Lookup table 같은 것을 약속으로 정해서 한글이나 기호 같은 문자를 변환하는 것 같다
  • Universal Coded Character Set + Transformation Format - 8 bit 의 약자
  • 본래는 FSS-UTF(File System Safe UCS/Unicode Transformation Format)이라는 이름으로 제안 되었다

UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다

  • ASCII문자들은 1바이트만으로 표시
  • 4바이트로 표현되는 문자는 기본 다국어 평면 바깥의 유니코드 문자, 거의 사용되지 않음
  • UTF-8이나 UTF-16 압축 알고리즘을 사용하면 바이트는 무시할 수 있을 정도이다

자바는 내부적으로 문자열을 UTF-16인코딩으로 저장, 문자열 직렬화를 위하여 UTF-8을 변형하여 사용 - 변형된 UTF-8

장점과 단점

  • ASCII 인코딩은 UTF-8의 부분집합으로 ASCII문자열에 대한 호환성이 보장

  • 적당한 인코딩으로 표현한 것보다 크다

    • 영어 : 2바이트
    • 한, 중, 일 : 3바이트

Javascript encodeURIComponent()

  • 전역객체의 빌트인 메서드
  • UTF-8로 인코딩함
  • e.g., '가' -> '%EA%B0%80'
  • decodeURIComponent() : 매개변수로 전달된 URI구성요소를 디코딩함

고찰

  • 평소에 무심결에 넘겼던 UTF-8이 뭔지 알아보았다
  • 사실 자바스크립트 딥다이브 스터디 중 21장에서 빌트인메서드 중에 encodeURIComponent가 나왔는데
  • 이것에 대해 이야기하다보니 UTF-8이 뭔지 궁금해졌고 그것을 찾아보는 시간을 가졌다
  • 나머지 meta 태그에 있는 것들을 모두 조사하는 것은 언제올지 모르는 다음으로 미루도록 하자

참고

profile
움직이는 만큼 행복해진다

0개의 댓글