위키득계정 ↗
기술

문자 인코딩

문자 인코딩기술
영문명
Character encoding
주요 역할
문자와 저장 표현의 대응
대표 예
UTF-8, UTF-16 등
구분 개념
코드 포인트와 글꼴
문자 인코딩은 문자를 저장하거나 전달할 수 있는 코드와 바이트열로 표현하는 규칙이다. 같은 바이트열도 어떤 인코딩으로 해석하는지에 따라 다른 글자가 되거나 해석 오류가 생길 수 있다.

저장된 숫자를 글자로 읽기

텍스트 파일에 화면의 글자 모양이 그대로 들어 있는 것은 아니다. 파일에는 바이트열이 저장되고 프로그램이 인코딩 규칙에 따라 문자로 해석한다. 그 문자를 어떤 모양으로 그릴지는 글꼴과 렌더링 과정이 담당한다.

유니코드와 UTF의 관계

유니코드는 문자에 코드 포인트를 부여하고 문자 처리에 필요한 여러 성질을 정의한다. UTF-8이나 UTF-16은 유니코드의 내용을 실제 저장 단위로 나타내는 방식이다. 유니코드라는 말과 특정 UTF 인코딩을 항상 같은 뜻으로 쓰면 차이를 놓친다.

깨진 글자는 어디에서 생길까

저장할 때와 읽을 때 서로 다른 규칙을 사용하면 글자가 엉뚱하게 보일 수 있다. 원래 인코딩을 알아내 올바르게 읽으면 복구할 수 있는 경우도 있지만, 변환 과정에서 지원하지 않는 문자가 대체 기호로 바뀌면 정보가 이미 사라졌을 수 있다.

파일의 인코딩 표기를 바꾸는 것과 실제 바이트열을 변환하는 것은 다른 작업이다. 여러 번 잘못 변환하면 상태가 더 복잡해질 수 있으므로 원본을 보존하고 읽기와 변환 단계를 구분해야 한다.

글자 수를 세는 기준

바이트 수, 코드 포인트 수와 사람이 인식하는 글자 수는 같지 않을 수 있다. 결합 문자나 여러 코드 포인트로 이루어진 이모지 등이 이런 차이를 드러낸다. 입력 길이 제한이나 커서 이동을 구현할 때는 어떤 단위를 세는지 정해야 한다.

관련 문서

유니코드 / UTF-8 / 바이트 / 엔디언