한글은 왜 2바이트이기도 하고 3바이트이기도 할까
글자를 숫자로 적는 방식(인코딩)이 달라서예요. EUC-KR은 한글 한 자를 2바이트로, UTF-8은 3바이트로, UTF-16은 2바이트로 적어요. 같은 '가'인데 적는 법만 다른 거예요.
글자별 바이트 수
칸칸의 바이트 계산기로 한 글자씩 넣어 센 값이에요.
| 글자 | UTF-8 | EUC-KR | UTF-16 |
|---|---|---|---|
| A (영문) | 1 | 1 | 2 |
| 띄어쓰기 | 1 | 1 | 2 |
| 가 (한글) | 3 | 2 | 2 |
| 漢 (한자) | 3 | 2 | 2 |
| € | 3 | 2 | 2 |
| 😀 | 4 | 못 담음 | 4 |
영문과 숫자만 쓴 글은 UTF-8과 EUC-KR의 바이트 수가 같아요. 차이는 한글과 한자에서 생겨요.
EUC-KR과 한글 2,350자
EUC-KR의 바탕인 국가표준 KS X 1001에는 한글이 2,350자, 한자가 4,888자 들어 있어요. 그런데 초성, 중성, 종성을 조합해 만들 수 있는 현대 한글은 11,172자예요. 나머지 8,822자는 이 표에 없어요.
윈도우가 쓰는 확장판(CP949)은 빠진 8,822자까지 모두 2바이트로 넣었어요. 브라우저가 EUC-KR이라고 부르는 것도 이 확장판이에요. 칸칸은 확장판 표를 한 글자씩 대조해서, 2바이트로 담기는 글자가 17,048자이고 그 가운데 한글이 11,172자인 것을 확인했어요.
예를 들어 '똠'은 2,350자에 없는 글자예요. 확장판으로는 2바이트로 적을 수 있지만, 옛 완성형만 받는 곳에서는 적을 수 없어요. 바이트 계산기는 이런 글자가 글에 몇 자 있는지 따로 알려 줘요.
바이트 제한을 글자 수로 바꾸면
한글만 쓴다고 하면 계산은 단순해요.
- UTF-8로 1,000바이트 제한이면 한글 333자까지 들어가요. 333자는 999바이트이고, 334자는 1,002바이트라서 넘어요.
- EUC-KR로 1,000바이트 제한이면 한글 500자까지 들어가요.
실제 글에는 띄어쓰기와 영문, 숫자가 섞여 있고 이것들은 1바이트라서, 쓸 수 있는 글자 수는 이보다 조금 많아요. 정확한 값은 글을 직접 넣어 세어 보는 게 빨라요.
학교생활기록부를 적는 나이스(교육정보시스템)도 한글 1자를 3Byte로 세어요. 그래서 한글 기준 500자인 항목의 한도가 1,500Byte예요. 항목별 숫자는 나이스 500자는 왜 1,500바이트일까에 있어요.
줄바꿈도 바이트를 써요
줄바꿈 한 번은 저장하는 방식에 따라 1바이트(LF)이기도 하고 2바이트(CR과 LF)이기도 해요. 바이트로 제한하는 곳에서 줄을 자주 바꾸면 그만큼 쓸 수 있는 글자가 줄어요. 바이트 계산기에서는 줄바꿈을 0, 1, 2 가운데 골라 맞춰 볼 수 있어요.
어느 방식인지 모를 때
글을 낼 곳의 입력창에 '가' 한 자만 넣어 보세요. 2가 올라가면 EUC-KR 방식이고 3이 올라가면 UTF-8 방식이에요. 1이 올라간다면 바이트가 아니라 글자 수로 세는 곳이에요.
UTF-8과 EUC-KR 바이트를 나란히 볼 수 있어요.
바이트 계산기 열기출처
- RFC 3629: UTF-8
- WHATWG Encoding Standard: EUC-KR
- 유니코드 한글 음절 부호표(U+AC00~U+D7A3)
- KS X 1001: 정보 교환용 부호계(한글 및 한자)
글에 틀린 곳이 있거나 바뀐 기준을 아시면 contact@lumenlab.page로 알려 주세요. 확인해서 고치고, 고친 날을 이 글에 적어요.