UTF - 8

유시현·2026년 1월 4일

Android

목록 보기
44/45

왜 인코딩 방식은 여러 개일까?

기존 인코딩 방식이 여러 개인 이유는
“기술이 복잡해서”가 아니라, 컴퓨터 역사 + 국가/OS/시대별 타협의 결과다.

문자는 원래 1바이트로 표현하기 어려웠고,
각 나라와 OS는 자기 언어를 처리하기 위해 각자 다른 방식을 만들었다.

그런데 국제 표준(Unicode)이 늦게 정착되면서
이미 쓰이던 인코딩들이 그대로 남게 되었다.

그래서 오늘날까지도 다음과 같은 인코딩이
레거시 데이터로 존재한다.

  • CP949
  • Shift-JIS
  • ISO-8859 계열

현재는?

현재 전 세계적으로 사실상 표준은 UTF-8이다.

  • 전 세계 언어를 모두 표현 가능
  • 웹, 모바일, 서버, DB에서 기본값
  • 단, 과거에 만들어진 텍스트 파일은 UTF-8이 아닐 수 있다

UTF-8은 텍스트 기반 데이터에서만 의미가 있다.

  • txt
  • json
  • xml
  • html
  • csv

이미지, mp3, zip 같은 바이너리 파일에는 적용 개념이 없다.


Unicode란 무엇인가

UTF-8을 이해하려면 먼저 Unicode를 이해해야 한다.


Unicode 개요

  • 도입: 1991년
  • 목적:

“전 세계 모든 문자를 하나의 표로 정리하자”

초기에는 65,536 문자면 충분할 것이라고 생각했다.


핵심 개념

문자 = 번호(code point)
Unicode는 문자를 번호로 치환하는 개념이다

예시:

  • A → U+0041
  • 가 → U+AC00
  • 😀 → U+1F600

Unicode 자체는 저장 방식이 아니다.
그저 “이 문자는 이 번호다”라는 약속이다.


Unicode 전체 범위

U+0000 ~ U+10FFFF
  • 총 1,114,112개
  • 0x10FFFF = 1,114,111
  • 0부터 시작하므로 +1

Plane 구조

Unicode는 하나의 평면이 아니라
17개의 Plane(평면) 으로 구성되어 있다.

Plane이름범위예시
0BMPU+0000 ~ U+FFFF가, 漢
1SMPU+10000 ~ U+1FFFF😀
2SIPU+20000 ~ U+2FFFF확장 한자
16Private UseU+100000 ~ U+10FFFF사용자 정의

Plane 0 (BMP)의 의미

초기 Unicode의 의도는 다음과 같았다.

Plane 0 하나에 전 세계 모든 문자를 담는 것

하지만 한자 수가 너무 많아 실패했다.

그래서:

  • 기본 문자는 Plane 0
  • 확장 문자는 보조 Plane으로 이동

언어별 위치는 다음과 같다.

  • 한글: 전부 Plane 0
  • 한자:
    • 기본 한자 → Plane 0
    • 확장 한자 → Plane 2

Plane 0은 각 언어에서
“기본적이고 일상적으로 쓰이는 문자 집합”이 배치된 곳이다


UTF-8

UTF-8이란?

UTF-8은 Unicode를 실제로 저장·전송하기 위한 구현 방법 중 하나다.

Unicode가 번호 체계라면,
UTF-8은 그 번호를 바이트로 표현하는 방식이다.


UTF-8의 핵심: 고정 비트 패턴

UTF-8은 가변 길이 인코딩이다.

길이패턴payload 비트
1바이트0xxxxxxx7비트
2바이트110xxxxx 10xxxxxx11비트
3바이트1110xxxx 10xxxxxx 10xxxxxx16비트
4바이트11110xxx 10xxxxxx 10xxxxxx 10xxxxxx21비트

문자에 따라 1~4바이트만 사용한다.


UTF-8은 어떻게 바이트 수를 결정할까?

UTF-8은 ‘언어의 개수’를 기준으로 하지 않는다.
유니코드 코드포인트 값이 들어갈 수 있는 최소 바이트 수를 사용한다.


예제: U+7F7F를 UTF-8로 인코딩

코드포인트

U+7F7F
0111 1111 0111 1111

10진수: 32639 → 3바이트 문자


3바이트 UTF-8 패턴 적용

1110xxxx 10xxxxxx 10xxxxxx
1110 0111   10 111101   10 111111

결과

11100111 10111101 10111111

UTF-8: E7 BD BF


정리

  • Unicode는 문자를 번호로 정의하는 표준
  • UTF-8은 그 번호를 바이트로 표현하는 방식
  • UTF-8은 항상 최소 바이트 수를 사용
  • Plane 0은 일상 언어의 기본 문자 영역

Unicode는 본질이고,
UTF-8은 구현이다.

profile
안드로이드 ,ios 공부하고 있습니다

0개의 댓글