← 질문 목록
#353깊이 0
한글이 깨져 보이는 이유는?
언어 · 런타임기초
대개 저장할 때 쓴 규칙과 읽을 때 쓴 규칙이 달라서다. 바이트는 그대로인데 그것을 글자로 자르는 방법이 어긋난다.
- 글자 한을 저장한다
그다음은 UTF-8 규칙으로 3바이트가 된다입니다. 그다음
UTF-8 규칙으로 3바이트가 된다그다음은 읽는 쪽이 다른 규칙으로 그 바이트를 자른다입니다. 그다음
읽는 쪽이 다른 규칙으로 그 바이트를 자른다그다음은 엉뚱한 글자나 물음표가 나온다입니다. 그다음
엉뚱한 글자나 물음표가 나온다
유니코드와 UTF-8은 다른 층이다. 유니코드는 글자마다 번호를 매긴 표이고, UTF-8은 그 번호를 바이트로 적는 방법 중 하나다.
ASCII와 호환되는 규칙에서는 영문이 1바이트로 같아서 어긋나도 잘 안 드러난다. 완성형 한글 한 글자는 UTF-8에서 3바이트라 규칙이 틀리면 바로 깨진다.
핵심 정리
깨지는 자리는 대개 경계다. DB 연결의 문자셋, 응답 헤더의 charset, 파일을 읽는 코드의 기본값 — 이 중 하나만 어긋나도 그 지점부터 어긋난다.
길이를 셀 때도 갈린다. 바이트 수와 글자 수가 다르므로 바이트 기준으로 자르면 글자 중간에서 잘려 깨질 수 있다. 이모지처럼 더 긴 글자에서는 글자 수마저 기대와 다르다.
깨진 위치를 보고 규칙과 바이트의 경계를 의심해야 한다. 깨진 화면을 보고 어느 경계를 의심할지가 답이다.