TL;DR
- UTF-8은 유니코드 코드 포인트 범위(
U+0000부터U+10FFFF까지) 중 surrogate code point range (U+D800부터U+DFFF까지)를 제외한 유효한 코드 포인트, 즉 Unicode Scalar Value를 1~4바이트 가변 길이로 인코딩하는 방식이다.- ASCII와 완전한 하위 호환성을 가지며, 바이트 순서(Endianness) 문제가 없는 설계로 현대 컴퓨팅의 표준 인코딩으로 자리 잡았다.
UTF-8 (Unicode Transformation Format - 8-bit)
1. 유니코드와 인코딩의 관계
- 유니코드 (Unicode): 전 세계 문자에 고유 정수값(코드 포인트)을 부여한 논리적 집합이다.
- UTF-8: 코드 포인트를 컴퓨터 메모리에 저장하거나 네트워크로 전송하기 위해 물리적 바이트열로 변환하는 규격이다.
| 구분 | 유니코드 (U+XXXX) | UTF-8 (0xXX…) |
|---|---|---|
| 역할 | 문자의 고유 식별 번호 | 데이터의 저장·전송 형태 |
| 단위 | 코드 포인트 / Unicode Scalar Value | 8비트 코드 단위 (Code Unit) |
2. 가변 길이 인코딩 구조
유니코드 코드 포인트 크기에 따라 사용 바이트가 결정되며, 각 바이트의 접두어 비트(Prefix)를 통해 문자의 경계를 식별한다.
| 유니코드 범위 (Hex) | 바이트 수 | 비트 패턴 (x = 데이터 비트) | 유효 비트 | 비고 |
|---|---|---|---|---|
U+0000부터 U+007F까지 | 1 | 0xxxxxxx | 7 | ASCII 동일 |
U+0080부터 U+07FF까지 | 2 | 110xxxxx 10xxxxxx | 11 | 라틴 문자 등 |
U+0800부터 U+FFFF까지 | 3 | 1110xxxx 10xxxxxx 10xxxxxx | 16 | 한글, 중문 등 |
U+10000부터 U+10FFFF까지 | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 21 | 이모지 등 |
RFC 3629 준수
UTF-8은 UTF-16의 Surrogate Pair 범위(
U+D800부터U+DFFF까지)를 직접 인코딩하는 것을 금지하여 상호 변환 시의 일관성을 보장한다.
3. 상세 인코딩 사례 (비트 연산)
한글 ‘가’ (U+AC00)
- 코드 포인트:
U+AC00→ 이진수1010 1100 0000 0000 - 패턴 판정: 3바이트 패턴(
1110xxxx 10xxxxxx 10xxxxxx) 적용 - 비트 배치:
11101010(0xEA)10110000(0xB0)10000000(0x80)
- 결과:
0xEA 0xB0 0x80
이모지 ’😀’ (U+1F600)
- 코드 포인트:
U+1F600→ 이진수1 1111 0110 0000 0000 - 패턴 판정: 4바이트 패턴(
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx) 적용 - 비트 배치:
11110000(0xF0)10011111(0x9F)10011000(0x98)10000000(0x80)
- 결과:
0xF0 0x9F 0x98 0x80
4. 기술적 강점
자기 동기화 (Self-synchronizing)
첫 바이트와 후속 바이트의 비트 패턴이 명확히 구분되어, 데이터 중간부터 읽기 시작하더라도 가까운 문자 경계를 쉽게 다시 찾을 수 있다.
엔디언 독립성 (Endianness Independent)
UTF-8은 8비트 코드 단위의 바이트열로 정의되므로 CPU 아키텍처(Little/Big Endian)에 따른 바이트 순서 교환이 필요하지 않다. 따라서 UTF-16/UTF-32와 달리 바이트 순서 판별 목적의 BOM(Byte Order Mark)은 필요하지 않다. 다만 UTF-8 BOM(EF BB BF)은 U+FEFF를 UTF-8로 인코딩한 바이트열로, 인코딩 식별용 서명으로 존재할 수 있다.
Connections
- ASCII (American Standard Code for Information Interchange) — 하위 호환 및 1바이트 영역 공유
- [[Unicode (유니코드)]] — 기반 문자 집합 규격
- Base64 인코딩 — 바이너리 데이터를 ASCII 안전 문자로 변환하는 기법
- [[Hexadecimal (16진수)]] — 인코딩 값 계산의 기반이 되는 수 체계


Discussion
Comments
댓글은 승인 후 공개됩니다.