위키득계정 ↗
기술

유니코드

유니코드기술
영문명
Unicode
주요 역할
문자와 기호의 통합적 표현·처리
식별 단위
코드 포인트
대표 인코딩
UTF-8, UTF-16, UTF-32
관련 개념
정규화와 문자소
유니코드는 여러 언어의 문자와 기호를 일관되게 표현하고 처리하기 위한 표준이다. 문자에 부여된 코드 포인트와 저장 바이트, 화면에 보이는 글자 수는 서로 다른 개념이다.

문자 번호와 그림

유니코드는 문자에 코드 포인트를 부여하고 관련 속성과 처리 규칙을 정의한다. 글꼴은 이를 화면에 어떤 모양으로 그릴지에 관여한다. 같은 문자가 글꼴마다 다른 외형으로 보일 수 있다.

유니코드를 지원한다고 모든 글꼴에 모든 글자의 그림이 포함되는 것은 아니다. 네모 상자가 보이는 현상은 문자 인코딩과 별개로 글꼴 지원의 문제일 수 있다.

한 글자가 하나의 코드 포인트는 아니다

결합 문자와 이모지 조합 등은 여러 코드 포인트가 하나의 시각적 단위처럼 보일 수 있다. 사람이 읽는 글자 수를 바이트 수나 코드 포인트 수와 그대로 같게 계산하면 문제가 생긴다.

문자열을 자르거나 커서를 옮길 때는 필요한 단위가 바이트인지 코드 단위인지 문자소인지 구분해야 한다. 서로 다른 프로그래밍 언어의 길이 함수도 같은 단위를 세지 않을 수 있다.

한글과 정규화

한글은 완성된 음절과 자모의 조합으로 표현될 수 있다. 화면에 같아 보이는 문자열도 내부 코드 포인트 배열이 다를 수 있다. 정규화는 정해진 규칙에 따라 이런 표현을 다루는 과정이다.

이름 비교와 검색, 파일 처리에서는 정규화 정책을 일관되게 적용하는 것이 중요하다. 다만 모든 문맥에서 무조건 같은 변환을 적용하기보다 정보와 식별 규칙을 고려해야 한다.

인코딩과 구별하기

UTF-8은 유니코드 코드 포인트를 바이트로 나타내는 한 방식이다. 유니코드 자체가 항상 글자마다 고정된 바이트 수를 요구하는 것은 아니다.

다른 인코딩으로 저장한 바이트를 잘못 해석하면 글자가 깨질 수 있다. 저장과 전송, 읽기 단계가 같은 규칙을 사용하는지 확인해야 한다.

관련 문서

UTF-8 / 한글 / 프로그래밍 언어