사람이 보기엔 한 글자예요. 하지만 컴퓨터 안에서는 여러 조각으로 이루어져 있어서, 세는 방식에 따라 👨👩👧 하나가 1이 되기도 하고 5, 8, 18이 되기도 해요.
조각으로 뜯어보면
가족 이모지 👨👩👧은 사실 이모지 세 개를 보이지 않는 이음 글자(ZWJ)로 붙인 거예요.
👨ZWJ👩ZWJ👧
조각은 5개이고, 이 조각들을 UTF-16으로 적으면 8단위, UTF-8로 적으면 18바이트예요. 화면에는 한 칸만 차지하니 사람에게는 1글자예요.
네 가지 방식으로 센 표
이 사이트의 글자 뜯어보기로 직접 센 값이에요.
글자
보이는 글자
코드 포인트
UTF-16 단위
UTF-8 바이트
가
1
1
1
3
😀
1
1
2
4
👍🏽 (엄지 + 피부색)
1
2
4
8
🇰🇷 (K + R)
1
2
4
8
1️⃣ (숫자 + 꾸밈 둘)
1
3
3
7
👨👩👧
1
5
8
18
🏴 (잉글랜드 깃발)
1
7
14
28
광고
어느 숫자가 맞나요
무엇을 재느냐에 따라 달라요.
사람이 읽는 길이를 재려면 보이는 글자 수가 맞아요. 유니코드 표준은 이것을 글자 묶음(grapheme cluster)이라고 불러요. 이 사이트는 이 기준으로 세요.
저장 용량이나 전송 길이를 재려면 바이트가 맞아요.
UTF-16 단위는 자바스크립트 같은 언어에서 글의 길이를 물었을 때 돌아오는 값이에요. 그래서 이 값으로 세는 입력창에서는 👨👩👧 하나가 8자로 나와요.
글자 수 제한이 있는 곳에 이모지를 넣었더니 생각보다 빨리 한도에 걸렸다면, 그곳은 조각이나 단위로 세고 있는 거예요.
이모지만 그런 게 아니에요
한글도 조각으로 풀어 적을 수 있어요. '한'은 보통 한 조각으로 저장되지만, 초성과 중성과 종성 세 조각(ᄒ, ᅡ, ᆫ)으로 풀어 적는 방식도 있어요. 이렇게 풀린 '한'은 화면에서는 똑같이 보이는데 코드 포인트는 3개, UTF-8로는 9바이트예요. 보이는 글자로 세면 여전히 1글자예요.
글 속에 풀어 적힌 글자나 보이지 않는 글자가 섞여 있으면 눈으로는 찾기 어려워요. 글자 뜯어보기에 글을 넣으면 여러 조각으로 된 글자만 골라서 보여 줘요.