저장된 숫자를 글자로 읽기
텍스트 파일에 화면의 글자 모양이 그대로 들어 있는 것은 아니다. 파일에는 바이트열이 저장되고 프로그램이 인코딩 규칙에 따라 문자로 해석한다. 그 문자를 어떤 모양으로 그릴지는 글꼴과 렌더링 과정이 담당한다.
유니코드와 UTF의 관계
유니코드는 문자에 코드 포인트를 부여하고 문자 처리에 필요한 여러 성질을 정의한다. UTF-8이나 UTF-16은 유니코드의 내용을 실제 저장 단위로 나타내는 방식이다. 유니코드라는 말과 특정 UTF 인코딩을 항상 같은 뜻으로 쓰면 차이를 놓친다.
깨진 글자는 어디에서 생길까
저장할 때와 읽을 때 서로 다른 규칙을 사용하면 글자가 엉뚱하게 보일 수 있다. 원래 인코딩을 알아내 올바르게 읽으면 복구할 수 있는 경우도 있지만, 변환 과정에서 지원하지 않는 문자가 대체 기호로 바뀌면 정보가 이미 사라졌을 수 있다.
파일의 인코딩 표기를 바꾸는 것과 실제 바이트열을 변환하는 것은 다른 작업이다. 여러 번 잘못 변환하면 상태가 더 복잡해질 수 있으므로 원본을 보존하고 읽기와 변환 단계를 구분해야 한다.
글자 수를 세는 기준
바이트 수, 코드 포인트 수와 사람이 인식하는 글자 수는 같지 않을 수 있다. 결합 문자나 여러 코드 포인트로 이루어진 이모지 등이 이런 차이를 드러낸다. 입력 길이 제한이나 커서 이동을 구현할 때는 어떤 단위를 세는지 정해야 한다.