이모지 제거기
텍스트에서 이모지를 한 번에 삭제·정리
📖 숫자도 기술적으로는 이모지다? — Intl.Segmenter와 이모지 오탐 문제 가이드 보기
이모지 제거기란?
이 도구는 문자열을 단순히 한 글자(코드 포인트)씩 자르지 않고, Intl.Segmenter API로 사람이 실제로 인식하는 하나의 '글자 단위'(grapheme cluster)로 나눈 뒤, 각 단위가 유니코드 Emoji 속성을 가지고 있는지 정규식으로 검사해 제거합니다. 이 방식이 중요한 이유는 👨👩👧 같은 가족 이모지가 실제로는 남성, 여성, 여자아이 이모지 3개와 그 사이를 잇는 보이지 않는 ZWJ(Zero Width Joiner) 문자가 결합된 복합 문자열이기 때문입니다. 단순 코드 포인트 단위로 처리하면 이런 결합 이모지가 반쪽만 지워지거나 깨진 조각이 남는데, grapheme 단위 처리는 이런 결합 이모지 전체를 하나의 덩어리로 인식해 통째로 제거합니다. 크롤링한 SNS 데이터를 정제하거나, 이모지가 섞인 리뷰·댓글을 데이터베이스에 저장하기 전에 순수 텍스트만 추출할 때 활용됩니다.
자주 묻는 질문
이모지 제거 후 공백이 남나요?
이모지를 제거하면 그 자리가 빈 문자열이 되므로 앞뒤 단어 사이에 공백이 겹쳐 남을 수 있습니다. '연속 공백 정리' 옵션을 켜면 정규식으로 2개 이상 연속된 공백을 하나로 합쳐 이 문제를 정리합니다.
특수 기호(★, ✓)도 제거되나요?
아니요. 이 도구는 유니코드 Emoji 속성을 검사하는데, 표준상 숫자 0~9, #, * 같은 일부 문자도 기술적으로 Emoji 속성을 가지고 있어 오탐이 발생할 수 있어 별도로 예외 처리했습니다. ★나 ✓ 같은 일반 기호 문자는 애초에 Emoji 속성이 없어 정규식에 걸리지 않고 그대로 남습니다.
결과를 바로 복사할 수 있나요?
네. Copy 버튼을 누르면 이모지가 제거된 출력창의 텍스트 전체가 클립보드에 복사되어 바로 다른 곳에 붙여넣을 수 있습니다.
피부색·국기 이모지도 제거되나요?
네. 피부색 변형(예: 👍🏽)은 기본 이모지 뒤에 피부색 지정 문자가 결합된 하나의 grapheme으로, 국기 이모지(예: 🇰🇷)는 두 개의 지역표시문자가 결합된 grapheme으로 처리되는데, 두 경우 모두 Intl.Segmenter가 하나의 단위로 묶어주므로 정상적으로 통째 제거됩니다.
이모지 카운트도 확인할 수 있나요?
네. 제거 과정에서 실제로 이모지로 판정되어 삭제된 grapheme의 개수를 세어 '제거된 이모지' 칸에 표시하고, 원본과 결과 텍스트의 글자 수도 함께 보여줍니다.
대용량 텍스트도 처리 가능한가요?
가능합니다. 다만 Intl.Segmenter로 전체 텍스트를 grapheme 단위로 분해하는 연산은 텍스트 길이에 비례해 시간이 걸리므로, 수십만 자 이상의 매우 긴 텍스트는 입력할 때마다 처리 속도가 느려질 수 있습니다.
원본 텍스트가 변경되나요?
아니요. 입력창의 원본 텍스트는 전혀 수정되지 않고 그대로 남아 있으며, 이모지가 제거된 결과만 별도의 출력창에 새로 표시됩니다.
ZWJ 복합 이모지도 제거되나요?
네. 👨👩👧 같은 ZWJ로 결합된 복합 이모지는 여러 개의 유니코드 코드 포인트로 이루어져 있지만, Intl.Segmenter가 이를 사람이 보는 것과 동일하게 하나의 grapheme cluster로 인식하기 때문에 부분적으로 남지 않고 전체가 한 번에 제거됩니다.