이모지 뒤에서 Backspace를 누르면 보통 한 번에 사라집니다. 그래서 한 문자처럼 느껴지지만, 같은 그림이 코드 포인트 하나나 둘, 때로는 훨씬 긴 시퀀스로 저장됩니다.
유니코드에서는 다음 단계를 구분합니다.
- 코드 포인트: U+1F52C 같은 번호가 붙은 위치
- 인코딩된 문자: 그 위치에 배정된 추상적 대상
- 자소 클러스터: 사용자가 보통 하나의 텍스트 단위로 느끼는 시퀀스
- 글리프: 글꼴이나 이모지 세트가 그린 모습
대부분은 서로 맞아떨어지지만 이모지에서는 크게 갈라집니다.
하트는 텍스트일 수도, 이모지일 수도 있다
♥는 U+2665 BLACK HEART SUIT, ❤는 U+2764 HEAVY BLACK HEART입니다. 둘 다 현대 컬러 이모지보다 오래된 기호입니다.
유니코드는 보이지 않는 변형 선택자로 표시 방식을 요청합니다.
- U+FE0E(Variation Selector-15): 텍스트 스타일
- U+FE0F(Variation Selector-16): 이모지 스타일
❤︎는 U+2764 뒤에 U+FE0E가, ❤️는 U+FE0F가 붙습니다. 선택자는 두 번째 그림이 아니라 앞 문자를 어떻게 표시할지 알려 주는 지시입니다.
앱이 선택자를 무시하거나 이모지 글꼴을 지원하지 않으면 흑백 하트로 보일 수 있습니다. 렌더링 차이지 텍스트가 망가졌다는 뜻은 아닙니다.
피부색은 수정자다
이모지 피부색은 Fitzpatrick 분류를 바탕으로 한 수정 문자입니다. 지원되는 사람이나 신체 부위 이모지 뒤에 한 개를 붙입니다.
👋🏽는 다음 두 문자입니다.
- U+1F44B WAVING HAND SIGN
- U+1F3FD EMOJI MODIFIER FITZPATRICK TYPE-4
지원 시스템은 둘을 한 손으로 그립니다. 미지원 시스템에서는 기본 손과 색 수정자가 따로 나타날 수 있습니다.
보이지 않는 접착제 ZWJ
U+200D ZERO WIDTH JOINER는 보이지 않는 서식 문자입니다. 이모지 ZWJ 시퀀스에서는 이웃한 이모지를 지원되는 하나의 디자인으로 합치도록 요청합니다.
👩🔬는 다음으로 이루어집니다.
👩WOMAN- U+200D ZERO WIDTH JOINER
🔬MICROSCOPE
지원 시스템은 여성 과학자를 그립니다. 그렇지 않으면 여성과 현미경을 나란히 표시합니다. 논리적 텍스트는 그대로이고, 결합 글리프만 글꼴과 플랫폼 기능에 달려 있습니다.
가족과 관계 이모지는 여러 사람, 하트, 키스, 성별 기호, 피부색을 연결하기도 합니다. 작은 아이콘 하나가 코드 포인트로 된 짧은 문장과 같은 구조를 가질 수 있습니다.
국기는 또 다른 방식을 쓴다
대부분의 국기는 두 개의 지역 표시 문자로 만들어집니다. 일본 국기는 J와 P에 해당하는 두 표시 문자의 조합입니다.
코드 포인트에 국기 이미지가 저장된 것은 아닙니다. 지역 시퀀스를 이모지 지원 시스템이 국기로 그립니다. 미지원 환경에서는 네모 안의 두 글자로 보일 수 있습니다.
일부 지역 깃발은 검은 깃발과 보이지 않는 태그 문자를, 키캡 이모지는 숫자·선택자·U+20E3 COMBINING ENCLOSING KEYCAP을 조합합니다. 이모지는 작은 그림 폴더가 아니라 여러 인코딩 조리법의 집합입니다.
‘길이’는 무엇을 세느냐에 달려 있다
- UTF-16 코드 단위는 몇 개인가?
- 유니코드 코드 포인트는 몇 개인가?
- 커서가 지나야 할 자소 클러스터는 몇 개인가?
- 렌더러가 그린 글리프는 몇 개인가?
답은 모두 다를 수 있습니다. 코드 단위로 자르면 서로게이트 쌍을 깨고, 코드 포인트로 잘라도 피부색이나 선택자를 기본 문자에서 떼어 놓을 수 있습니다. 커서 이동, 선택, 삭제와 글자 수 제한에는 유니코드 자소 클러스터 규칙이 필요합니다.
화면의 ‘이모지 하나’는 코드 포인트 하나라기보다 자소 클러스터 하나로 이해하는 편이 정확합니다.
이모지 조합 모음에서 가족, 직업, 국기나 하트를 가져와 위 현미경에 붙이면 보이지 않는 구성 요소를 확인할 수 있습니다.