글자 수 세기
공백 포함 글자 수와 공백 제외 글자 수, 그리고 데이터베이스와 문자 메시지 게이트웨이가 실제로 재는 바이트 수까지 보여 줍니다. 이모지는 실제로 한 글자이므로 여기서도 한 글자로 셉니다.
- 저장되지 않음
- 대기열 없음, 기다림 없음
- 회원가입 없음, 워터마크 없음
0
글자 수
사람이 보는 기준
0
공백 제외
공백 문자 제외
0
단어 수
모든 언어 지원
0
UTF-8 바이트
데이터베이스가 세는 기준
- 줄 수편집기가 줄 번호를 매기는 기준
- 0
- 문장 수“Dr.”나 “etc.”에서 끊기지 않음
- 0
- 문단 수빈 줄로 구분된 덩어리
- 0
- 코드 포인트정규 표현식 “.”이 일치하는 단위
- 0
- UTF-16 단위JavaScript의 string.length가 반환하는 값
- 0
- UTF-8 바이트VARCHAR 제한과 HTTP 헤더가 재는 기준
- 0
- 읽는 시간눈으로 읽을 때, 분당 238단어 기준
- —
- 말하는 시간소리 내어 읽을 때, 분당 150단어 기준
- —
- 가장 긴 단어바이트가 아닌 글자 기준
- —
- 평균 단어 길이대략적인 가독성 지표
- —
입력을 시작하면 모든 수치가 채워져요. 이모지나 중국어 문장을 넣어 보세요. 둘 다 사람이 세는 방식 그대로 세는데, 대부분의 글자 수 세기 도구는 이걸 틀리게 셉니다.
사용 방법
붙여 넣거나 입력하기
입력하는 대로 수치가 바뀝니다. 아무것도 저장하지 않습니다.
필요한 수치 고르기
글자 수, 공백 제외 글자 수, 코드 포인트, UTF-8 바이트를 각각 어디에 쓰이는지와 함께 보여 줍니다.
제한 확인
SEO 제목, 메타 설명, 문자 메시지 분할, 255바이트 필드를 모두 지금까지 쓴 내용과 비교해 보여 줍니다.
“글자”의 뜻이 네 가지라서, 수치도 네 가지
가족 이모지나 피부색이 적용된 엄지 척 이모지를 예로 들어 보겠습니다. 사람은 한 글자로 봅니다. 이 이모지는 보이지 않는 연결 문자로 이어진 여러 코드 포인트로 이루어져 있어서, 정규 표현식은 일곱 개로 봅니다. JavaScript는 텍스트를 16비트 단위로 저장하고 기본 범위 밖의 문자는 두 단위를 차지하므로 열한 개라고 보고합니다. 데이터베이스 열에 넣기 위해 UTF-8로 인코딩하면 25바이트를 차지합니다. 어느 수치도 틀리지 않았고 어느 하나가 정답도 아닙니다. 맞는 수치는 전적으로 무엇이 제한을 두는지에 달려 있습니다.
따라서 실제로 물어야 할 것은 누가 제한을 정했느냐입니다. VARCHAR로 선언된 데이터베이스 열은 대부분의 엔진에서 바이트를 세며, 그래서 영어 255자를 받는 필드가 일본어는 훨씬 적게 받습니다. 문자 메시지(SMS)는 자체 7비트 문자 집합으로 160자이며, 그 집합 밖의 문자가 하나라도 들어가면 메시지당 70자로 줄어듭니다. 둥근 따옴표나 이모지 하나로 메시지 한 통이 세 통이 될 수 있습니다. JavaScript로 만든 폼 검증기는 거의 항상 UTF-16 단위를 세므로, 280자라고 적힌 필드가 이모지가 많은 더 짧아 보이는 문자열을 거부할 수 있습니다.
독자가 보는 글자 수는 가장 까다로운 수치이며, 브라우저 자체의 텍스트 분절 기능으로 셉니다. 왼쪽 화살표 키를 눌렀을 때 커서가 어디로 갈지 정하는 바로 그 기능입니다. 사람이 인식하는 모든 것에는 이것이 “한 글자”의 올바른 정의이며, 단순한 방식이 놓치는 경우도 처리합니다. 기본 글자에 결합 부호를 더해 쓴 악센트 글자는 한 글자이고, 힌디어와 태국어의 글자 묶음도 그 문자를 읽는 사람이 세는 방식대로 셉니다.
일반적인 영어 글에서는 네 수치가 모두 같으며, 그래서 문제가 드러나기 전까지는 보이지 않습니다. 이모지, 악센트와 결합 문자, 라틴 문자가 아닌 문자, 수학 기호에서 수치가 갈라지며, 바로 이런 입력 때문에 데이터베이스를 만든 지 석 달 뒤 필드가 소리 없이 잘려 나갑니다.
다른 작업이 필요할 때
코드에서는 기본 길이 대신 필요한 것을 세는 함수를 쓰세요. JavaScript의 Intl.Segmenter는 독자가 보는 글자를 세고, Python 3 문자열은 코드 포인트를 세며 len(s.encode("utf-8"))는 바이트를 셉니다. PHP에는 바로 이 구분을 위해 mb_strlen과 strlen이 따로 있습니다. 대부분의 언어에서 기본값은 그 언어에 편한 방식일 뿐이며, 여러분의 제한이 뜻하는 방식인 경우는 드뭅니다.
데이터베이스 필드가 제약이라면 근본적인 해결책은 그 앞 단계에 있습니다. MySQL에서는 열을 utf8mb4로, PostgreSQL에서는 text로 선언하면 잘림 버그 한 종류가 통째로 사라집니다. MySQL의 예전 utf8은 잘 알려진 대로 글자당 3바이트까지만 지원해 이모지를 아예 저장할 수 없습니다. 폼에서 조심스럽게 글자 수를 세는 것은 처음부터 다르게 선언했어야 할 열을 위한 임시방편입니다.
자주 묻는 질문
제 텍스트가 어딘가에 저장되나요?
아니요. 아무것도 저장하지 않고 어떤 요청도 보내지 않으며, 네트워크 연결을 끊어도 계속 작동합니다. 텍스트에서는 이 점이 생각보다 중요합니다. 사람들이 온라인 글자 수 세기 도구에 붙여 넣는 것은 미발표 원고, 법률 문서 초안, 학생 과제, 내부 문서이기 때문입니다.
글자 수가 왜 네 가지나 되나요?
“글자”에는 네 가지 뜻이 있는데 대부분의 도구는 하나만 알기 때문입니다. 여러분 눈에 한 글자로 보이는 것은 자소 클러스터이며, “é”, “🎉”, 심지어 “👨👩👧👦”도 각각 한 글자입니다. JavaScript의 string.length가 알려 주는 것은 UTF-16 코드 단위로, 이 가족 이모지는 11입니다. 정규 표현식이 일치시키는 것은 코드 포인트로, 7입니다. 그리고 데이터베이스 열이나 HTTP 헤더가 재는 것은 UTF-8 바이트로, 25입니다. 필요한 수치는 누가 제한을 두는지에 따라 달라지므로 여기서는 네 가지를 모두 보여 줍니다.
이모지는 몇 글자인가요?
여기서는 한 글자입니다. 읽는 사람에게 한 글자이고, 최신 플랫폼의 글자 수 제한도 그렇게 세기 때문입니다. 다른 곳에서는 2, 7, 11일 수도 있습니다. “👨👩👧👦”는 보이지 않는 연결 문자 세 개로 이어진 네 사람이므로, 코드 포인트로는 7개, JavaScript의 string.length가 세는 단위로는 11개입니다. 짧아 보이는 텍스트를 폼이 너무 길다고 거부했다면 대개 이 때문이며, 이 페이지의 바이트 수가 실제 크기를 보여 줍니다.
200자짜리 텍스트가 왜 255자 데이터베이스 필드에 안 들어가나요?
그 필드는 거의 확실히 글자가 아니라 바이트를 제한하기 때문입니다. UTF-8에서 일반 영어 글자는 1바이트씩이지만 악센트 글자는 2바이트, 중국어, 일본어, 아랍어, 이모지는 3~4바이트를 차지합니다. 그래서 일본어 200자는 600바이트가 됩니다. 바로 이 때문에 바이트 수를 보여 드리며, 데이터베이스가 실제로 확인하는 수치가 이것입니다.
이모지 하나 때문에 문자 메시지 제한이 160자에서 70자로 줄어드는 이유는요?
문자 메시지는 160자를 담는 압축된 7비트 문자 집합을 쓰는데, 이 집합에는 이모지도, 둥근 따옴표도 없고 악센트 글자도 거의 없습니다. 이 집합 밖의 문자가 하나라도 들어가면 메시지 전체가 유니코드로 바뀌고, 제한이 70자로 줄어듭니다. Word에서 붙여 넣은 둥근 아포스트로피 하나도 이모지만큼 쉽게 이런 일을 일으킵니다. 짧은 메시지가 세 통으로 청구되는 이유가 이것이며, 이 페이지는 그런 일이 생기는 순간 알려 드립니다.
공백도 세나요?
두 수치를 동시에 보여 드리므로 고를 필요가 없습니다. 줄바꿈과 탭도 공백으로 셉니다.
참고: 수치가 네 가지인 이유는 “글자”의 뜻이 네 가지이고, 필요한 수치는 누가 제한을 두는지에 따라 달라지기 때문입니다. 데이터베이스 VARCHAR는 UTF-8 바이트를, 정규 표현식은 코드 포인트를, JavaScript는 UTF-16 단위를, 사람은 눈에 보이는 것을 셉니다. 이모지에서 가장 크게 차이가 납니다.
내 웹사이트에 이 도구 넣기
블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.