개발자도구
UTF-8과 문자 인코딩: 한글이 깨져 보이는 이유
컴퓨터는 문자를 직접 저장하지 못하고, 모든 문자를 숫자로 바꾼 뒤 그 숫자를 다시 이진수로 저장합니다. 이때 "어떤 문자를 어떤 숫자로 바꿀 것인가"를 정한 규칙이 바로 문자 인코딩입니다. 문제는 이 규칙이 세상에 하나만 있는 것이 아니라 여러 가지가 존재한다는 점입니다.
한글이 깨지는 가장 흔한 원인은 텍스트를 저장할 때 사용한 인코딩과, 그 텍스트를 읽어 화면에 표시할 때 사용한 인코딩이 서로 다르기 때문입니다. 예를 들어 EUC-KR 방식으로 저장된 한글 파일을 UTF-8 방식으로 읽으려고 하면, 같은 바이트 숫자열이 완전히 다른 문자로 해석되어 알아볼 수 없는 문자가 나타납니다.
UTF-8은 오늘날 웹과 대부분의 시스템에서 사실상 표준으로 쓰이는 인코딩입니다. 영어 알파벳 같은 기본 문자는 1바이트로, 한글 같은 문자는 3바이트로 표현하는 가변 길이 방식을 쓰는데, 이 덕분에 영어 위주의 기존 시스템과도 호환성을 유지하면서 전 세계 대부분의 문자를 표현할 수 있습니다. 반면 EUC-KR은 한글만을 위해 설계된 옛 방식이라 표현할 수 있는 문자 범위가 좁고, 다른 언어와 섞인 문서에서는 호환성 문제가 생기기 쉽습니다.
실무에서 이런 문제를 예방하는 가장 확실한 방법은 파일 저장, 데이터베이스 연결, HTTP 응답 헤더 등 텍스트가 오가는 모든 지점에서 인코딩을 UTF-8로 명시적으로 통일하는 것입니다. 어느 한 지점이라도 인코딩 설정이 빠지거나 다른 값으로 되어 있으면, 그 지점을 통과하는 순간 한글이 깨질 위험이 남아 있습니다.