위키득계정 ↗
기술

UTF-8

UTF-8기술
전체 이름
Unicode Transformation Format, 8-bit
단위
바이트 기반 가변 길이
길이
유효한 코드 포인트당 1~4바이트
ASCII 범위
같은 1바이트 표현
관련 규격
RFC 3629와 유니코드 표준
UTF-8은 유니코드 코드 포인트를 1~4바이트로 표현하는 가변 길이 문자 인코딩이다. ASCII 범위와 호환되지만 바이트 수가 사용자가 보는 글자 수와 같지는 않다.

같은 문자열의 바이트 수

영문 ASCII 문자는 UTF-8에서 한 바이트로 표현된다. 여러 한글 음절은 세 바이트를 사용하며 기본 다국어 평면 밖의 많은 문자는 네 바이트를 사용한다.

모든 한글처럼 보이는 글자가 정확히 세 바이트라는 뜻은 아니다. 자모가 조합된 표현이나 여러 코드 포인트로 이루어진 글자는 전체 바이트 수가 달라진다.

중간에서 자르면 생기는 문제

하나의 코드 포인트가 여러 바이트일 수 있어 임의의 바이트 위치에서 자르면 잘못된 UTF-8이 생길 수 있다. 유효한 바이트 경계를 찾는 것과 시각적인 글자 경계를 찾는 것도 별개다.

결합 문자와 이모지 조합을 온전하게 보존하려면 문자소 단위의 처리도 필요할 수 있다. 사용 목적에 맞는 문자열 라이브러리를 선택해야 한다.

인코딩을 맞추는 경로

파일과 HTTP 응답, 데이터베이스 연결이 서로 다른 인코딩을 가정하면 같은 바이트가 다른 문자로 해석될 수 있다. 올바른 선언과 실제 바이트가 일치해야 한다.

이미 잘못 해석한 문자열을 다시 UTF-8로 저장한다고 원래 문자가 자동으로 복구되지는 않는다. 어느 단계에서 어떤 해석이 적용됐는지 추적해야 한다.

유효성 검증과 문자 의미

UTF-8에는 잘못된 연속 바이트와 금지된 코드 포인트 표현을 배제하는 규칙이 있다. 디코더가 잘못된 입력을 거절하거나 대체하는 정책은 응용 동작에 영향을 준다.

유효한 UTF-8이라는 사실이 내용의 안전성이나 시각적 구별 가능성을 보장하지는 않는다. 비슷하게 보이는 문자와 제어 문자 등은 별도의 사용 규칙으로 다뤄야 한다.

관련 문서

유니코드 / HTML / JSON