인코딩별 문자열 바이트 수 계산기
입력한 텍스트가 UTF-8, Shift_JIS, EUC-JP, UTF-16, JIS(ISO-2022-JP)에서 각각 몇 바이트가 되는지 측정합니다. 데이터베이스 컬럼 길이 제한이나 레거시 폼 입력 상한을 확인할 때 유용합니다.
팁
- UTF-8에서는 반각 영숫자가 각각 1바이트를 차지하지만, 히라가나·가타카나·한자 등 일본어 문자는 대부분 3바이트를 차지하므로, 같은 문자 수라도 영어와 일본어 텍스트의 바이트 수는 크게 달라질 수 있습니다.
- VARCHAR(255)처럼 컬럼에 바이트 기준 길이 제한을 적용하는 오래된 시스템에서는, 같은 문자 길이라도 일본어를 포함한 텍스트가 영어 텍스트보다 훨씬 빨리 한도에 도달합니다.
- 대부분의 이모지는 두 개의 코드 단위로 이루어진 서로게이트 쌍으로 표현되어 UTF-8과 UTF-16 모두에서 4바이트를 차지하므로, SNS의 글자 수 제한이 예상보다 빨리 채워지는 원인이 되기도 합니다.
- 이미 바이트 수를 알고 있고 이를 KB·MB 등 다른 단위로 변환하고 싶다면, 자매 도구인 "바이트 단위 변환기"를 이용하세요. 이 도구는 텍스트에서 바이트 수를 구하는 반대 방향의 계산을 담당합니다.
자주 묻는 질문
여담 ― SNS 글자 수 제한과 바이트 수의 알려지지 않은 관계
예전 버전의 MySQL이 사용하던 "utf8" 문자셋에는 뜻밖의 제약이 있었습니다. 실제로는 U+10000 이상의 유니코드 보조 문자, 즉 대부분의 이모지를 저장할 수 없었던 것입니다. UTF-8 자체는 문자당 최대 4바이트까지 지원하는 가변 길이 인코딩이지만, MySQL의 "utf8"은 역사적인 이유로 최대 3바이트까지만 처리할 수 있었기 때문에 이모지를 포함한 텍스트를 INSERT하려 하면 오류가 발생하는 문제가 오랫동안 보고되었습니다. 현재는 4바이트 전체 범위를 올바르게 처리할 수 있는 "utf8mb4"로의 마이그레이션이 권장되며, 이는 문자 인코딩과 바이트 수의 관계를 정확히 이해하는 것이 실무에서 왜 중요한지를 보여주는 대표적인 사례입니다.
트위터(현 X)가 140자 제한을 채택했던 시절, 일본어 사용자는 140자로도 충분히 긴 문장을 쓸 수 있는 반면 영어 사용자는 140자로는 단어 수로 20~30개 정도밖에 쓸 수 없어 불공평하다는 논쟁이 있었습니다. 이는 영어가 알파벳 1자=1문자인 데 비해, 일본어는 한자 한 글자에 훨씬 많은 정보량이 담겨 있기 때문입니다. 이후 트위터는 일본어 등의 언어는 "1문자=1카운트", 영어 등 일부 언어는 "2바이트=1카운트"로 계산하는 독자적인 가중치 방식을 도입해 언어 간 공평성을 조정했습니다.
휴대전화 SMS에도 비슷한 사정이 있습니다. GSM 방식의 SMS는 보통 한 통에 160자까지 보낼 수 있지만, 이모지나 일본어 문자처럼 7비트 GSM 문자셋에 포함되지 않는 문자가 단 하나라도 들어가면 인코딩 방식이 UCS-2(대략 UTF-16에 해당)로 전환되어 한도가 단숨에 70자까지 줄어듭니다. "일본어를 단 한 글자만 사용해도 보낼 수 있는 글자 수가 절반 이하로 줄어든다"는 현상은, 이 글의 주제인 문자 인코딩과 바이트 수의 관계가 만들어내는 전형적인 예입니다.