utf-8

sh·2025년 4월 8일

what
Universal Coded Character Set + Transformation Format
대부분의 웹, 국제 표준 인코딩

Unicode와의 구분
유니코드는 유니코드 협회에서 전 세계 문자를 고유하게 관리하는 표준(format)을 작성한 것
(prefix = U+, scope = "U+0000 ~ U+10FFFF" [길이6 이하 16진수] )

utf는 이를 다루기 위한 인코딩 방식

필요성
ASCII는 영어, 숫자, 특수문자, 약어만 포함
->전 세계의 문자를 표시할 수 있는 범용성있는 체계 필요
-> 이모지를 포함한 대부분 국가의 문자 표시가능

특징
1. 하나의 문자 표시를 위해 1~4byte 가변 길이 사용

길이가 고정되어있다면,
너무 작으면 모두 표현 불가
너무 크면 byte 낭비

디테일
자주 사용하는 영어, 숫자 등을 1byte 영역에 놓음

자주 사용하지 않는 고대문자 등을 4byte 영역에 놓음
수메르어 쐐기 문자 -> 𒀱 -> U+12031

영어, 숫자 등을 1byte로 표현하므로써,
기존 ASCII와 호환 및 대부분의 경우에서 텍스트 크기를 줄일 수 있음 (영어 숫자를 많이 쓰니까)

한글은 3byte 영역에 위치
  1. Self-synchronizing
    문자 중간에서 시작하더라도, 경계를 구분지을 수 있음
    -> 연속된 stream에서 임의 접근하거나, loss시에도 재개 가능

0xxxxxxx
1byte 문자 (ASCII 범주 내)

10xxxxxx
앞 문자열에 속한, 이어지는 byte

110xxxxx
2byte 문자

1110xxxx
3byte 문자

11110xxx
4byte 문자

11110xxx대신 1111xxxx로 표시하면 안되나?

byte 표시자 <-> 실질적인 문자를 명확히 구분짓는 용도로 0을 사용
e.g. 11111111 등은 구분이 모호

이러면 실질적으로 표현할 수 있는 bit가 줄어들지만,
현대에서 대부분의 문자를 표현 가능하다고 함

즉, 설계 철학에서 표현 범위 <-> 안정성, 동기화, 단순성 측면을 트레이드 오프 한 것
profile
CS 기록

0개의 댓글