이모지 하나는 몇 글자일까
사람이 보기엔 한 글자예요. 하지만 컴퓨터 안에서는 여러 조각으로 이루어져 있어서, 세는 방식에 따라 👨👩👧 하나가 1이 되기도 하고 5, 8, 18이 되기도 해요.
조각으로 뜯어보면
가족 이모지 👨👩👧은 사실 이모지 세 개를 보이지 않는 이음 글자(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글자예요.
글 속에 풀어 적힌 글자나 보이지 않는 글자가 섞여 있으면 눈으로는 찾기 어려워요. 글자 뜯어보기에 글을 넣으면 여러 조각으로 된 글자만 골라서 보여 줘요.
글자를 눌러 조각을 볼 수 있어요.
글자 뜯어보기 열기글에 틀린 곳이 있거나 바뀐 기준을 아시면 contact@lumenlab.page로 알려 주세요. 확인해서 고치고, 고친 날을 이 글에 적어요.