기술 노트

UTF-16 인코딩 방식의 이해와 실무 적용 팁

anothel 2025. 1. 9. 18:47

1. 개요

UTF-16은 16비트(2바이트)를 기본 단위로 사용하는 유니코드(Unicode) 인코딩 방식이다. 이 방식은 ASCII 문자뿐만 아니라 다양한 언어와 문자 체계를 효율적으로 표현할 수 있도록 설계되었다. UTF-16은 특히 BMP(Basic Multilingual Plane) 내 문자를 고정 길이로, 그 외의 문자는 가변 길이로 인코딩한다는 특징이 있다. 그러나 데이터 저장 시 "00"이 자주 포함되는 현상이나, 서러게이트 페어(Surrogate Pair)로 인해 연속적이지 않은 바이트 패턴이 발생할 수 있다.

이 글에서는 UTF-16의 구조, 작동 방식, 그리고 그로 인해 나타나는 데이터 패턴의 특징을 자세히 살펴본다.

2. UTF-16의 특징 및 동작 원리

2.1 UTF-16의 기본 구조

UTF-16은 유니코드 문자를 다음과 같은 방식으로 표현한다:

  • BMP(Basic Multilingual Plane): U+0000 ~ U+FFFF 범위의 문자는 2바이트로 표현.
  • 서러게이트 페어(Surrogate Pair): U+10000 이상의 문자는 4바이트로 표현. 이 방식은 두 개의 16비트 코드 유닛으로 구성된다.

예시:

  • ASCII 문자 'A' (U+0041): UTF-16에서 16진수 0041로 저장.
  • 이모지 😀 (U+1F600): 서러게이트 페어로 표현되어 D83D DE00으로 저장.

2.2 Little Endian과 Big Endian

UTF-16은 바이트 순서에 따라 두 가지 방식으로 구분된다:

  • Little Endian(LE): 덜 중요한 바이트가 앞에 온다. 예: U+0041 → 41 00
  • Big Endian(BE): 더 중요한 바이트가 앞에 온다. 예: U+0041 → 00 41

이 바이트 순서를 명시하기 위해 BOM(Byte Order Mark)을 사용하는데:

  • UTF-16 LE: FF FE
  • UTF-16 BE: FE FF

2.3 ASCII 문자의 "00" 포함

ASCII 문자는 U+0000 ~ U+007F 범위에 해당하며, UTF-16에서 상위 바이트가 항상 00으로 채워진다(Little Endian 기준). 예를 들어:

  • "ABC" → UTF-16 LE: 41 00 42 00 43 00

이로 인해 ASCII 기반 데이터에서는 "00"이 반복적으로 나타난다.

2.4 비연속적인 데이터 패턴

UTF-16 데이터는 다음과 같은 이유로 비연속적인 패턴을 보일 수 있다:

  1. ASCII와 비-ASCII 문자의 혼합:
    • ASCII 문자는 상위 바이트가 00으로 채워지는 반면, 비-ASCII 문자는 두 바이트를 모두 사용.
    • 예: "A한" → UTF-16 LE: 41 00 D5 5C
  2. 서러게이트 페어:
    • 코드 포인트가 U+10000 이상인 경우 서러게이트 페어로 4바이트를 사용.
    • 예: "𐍈" (U+10348) → UTF-16 LE: 01 D8 48 DF
  3. BOM:
    • BOM 값이 추가되면 데이터의 시작 부분과 나머지 데이터 패턴이 달라질 수 있음.

2.5 데이터 패턴 예시

다음은 "ABC한글𐍈" 문자열을 UTF-16으로 인코딩한 데이터 패턴이다:

문자유니코드UTF-16 LEUTF-16 BE

A U+0041 41 00 00 41
B U+0042 42 00 00 42
C U+0043 43 00 00 43
U+D55C 5C D5 D5 5C
U+AE00 00 AE AE 00
𐍈 U+10348 01 D8 48 DF D8 01 DF 48

3. UTF-16의 장단점

3.1 장점

  • 다국어 지원: 거의 모든 언어를 표현 가능.
  • 효율성: BMP 내 문자는 고정 길이(2바이트)로 저장되어 처리 속도가 빠름.
  • 확장성: 서러게이트 페어를 통해 U+10000 이상의 문자도 표현 가능.

3.2 단점

  • 공간 낭비: ASCII 문자는 1바이트로 표현 가능하지만, UTF-16에서는 2바이트를 사용.
  • 복잡한 데이터 패턴: 서러게이트 페어나 ASCII/비-ASCII 문자의 혼합으로 인해 불규칙한 데이터 패턴 발생.
  • BOM 의존성: BOM 유무에 따라 파일 해석 방식이 달라질 수 있음.

4. 결론

UTF-16은 다국어 환경에서 강력하고 유연한 인코딩 방식으로, 대부분의 문자와 언어를 효과적으로 처리할 수 있다. 그러나 ASCII 기반 데이터에서는 공간 낭비와 "00"의 반복적인 포함, 서러게이트 페어로 인한 비연속적인 데이터 패턴이 단점으로 작용한다. 이러한 특징을 이해하고 활용하면 UTF-16의 효율성을 최대화할 수 있을 것이다.

728x90