JavaScript에서 이모지 길이의 특이한 경우: UTF-8, UTF-16, UTF-32 및 그래피임 클러스터

2025-08-22

이 글에서는 다양한 프로그래밍 언어에서 이모지 문자열 길이의 불일치에 대해 자세히 살펴봅니다. 예를 들어 JavaScript에서는 "🤦🏼‍♂️".length가 7이지만 Python에서는 5, Rust에서는 17입니다. 이는 언어가 문자열 인코딩(UTF-16, UTF-8 등)과 문자 단위(유니코드 스칼라 값, 확장 그래피임 클러스터 등)를 처리하는 방식의 차이에서 비롯됩니다. 저자는 기본 인코딩에서의 길이를 기억하는 것은 합리적이지만 다른 길이(확장 그래피임 클러스터 등)는 불필요한 저장 공간 오버헤드와 동기화 문제를 피하기 위해 필요할 때 계산해야 한다고 주장합니다. 이 글에서는 다양한 인코딩 방식의 장단점을 분석하고 저장 및 교환에서 UTF-8의 장점을 강조합니다. 마지막으로 공정한 길이 할당 문제를 다루면서 언어 간에 정보 밀도를 공정하게 측정하는 간단한 방법이 없다는 것을 보여주고, 세계 인권 선언 번역을 예로 제시합니다.