UTF-8은 유니코드 문자 인코딩의 하나이다. ASCII 문자는 1바이트로 표현하며, 기타 문자는 2~4바이트로 표현한다. 대부분의 Linux 배포판과 Mac OS X에서 표준 인코딩으로 채택되어 사용되고 있으며, 웹에서도 많이 쓰인다.
대부분의 CJK 문자(한글, 한자, 히라가나, 가타카나 등)는 3바이트 영역에 들어간다.
구조
첫 번째 코드 포인트 |
마지막 코드 포인트 |
첫째 바이트 | 둘째 바이트 | 셋째 바이트 | 넷째 바이트 | 시작 | 끝 |
---|---|---|---|---|---|---|---|
U+0000 | U+007F | 0xxxxxxx |
00 |
7F
| |||
U+0080 | U+07FF | 110xxxxx |
10xxxxxx |
C2 80 |
DF BF
| ||
U+0800 | U+FFFF | 1110xxxx |
10xxxxxx |
10xxxxxx |
E0 A0 80 |
EF BF BF
| |
U+10000 | U+10FFFF | 11110xxx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
F0 90 80 80 |
F4 8F BF BF
|
예를 들어 €(U+20AC, 유로 기호)는 다음과 같이 인코딩된다.
- U+0800과 U+FFFF 사이에 있으므로 3바이트로 표현된다.
- 0x20AC는 2진수로
0010 0000 1010 1100
로 표현된다. 맨 앞에 0 두 개가 추가된 이유는 3바이트 표현은 정확히 16비트를 필요로 하기 때문이다. - 이를
1110xxxx 10xxxxxx 10xxxxxx
이라는 패턴에 그대로 집어넣는다. 그러면11100010 10000010 10101100
이 된다. - 따라서 €는 UTF-8에서
E2 82 AC
로 인코딩된다.
하나의 문자가 여러 가지 방법으로 인코딩될 수 있으나, 올바른 UTF-8 표현은 가장 짧은 것 하나뿐이다. 예를 들어 U+0000은 00
, C0 80
, D0 80 80
, F0 80 80 80
과 같이 여러 가지 방법으로 인코딩될 수 있지만, 이 중에서 가장 짧은 00
하나만이 올바른 UTF-8 표현이다.