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 데이터는 다음과 같은 이유로 비연속적인 패턴을 보일 수 있다:
- ASCII와 비-ASCII 문자의 혼합:
- ASCII 문자는 상위 바이트가 00으로 채워지는 반면, 비-ASCII 문자는 두 바이트를 모두 사용.
- 예: "A한" → UTF-16 LE: 41 00 D5 5C
- 서러게이트 페어:
- 코드 포인트가 U+10000 이상인 경우 서러게이트 페어로 4바이트를 사용.
- 예: "𐍈" (U+10348) → UTF-16 LE: 01 D8 48 DF
- 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의 효율성을 최대화할 수 있을 것이다.
'기술 노트' 카테고리의 다른 글
문자열 인코딩의 이해: ASCII, UTF-8, CP949, EUC-KR (0) | 2025.01.08 |
---|---|
메모리 할당 전략 비교: 1MB * 100 vs 100MB * 1 (0) | 2025.01.07 |
Windows 고성능 타이머 사용법: QueryPerformanceFrequency와 QueryPerformanceCounter (0) | 2025.01.06 |
이진탐색(Binary Search) 완벽 가이드 (1) | 2025.01.05 |
Shunting Yard 알고리즘: 중위 표기법에서 후위 표기법으로 (1) | 2025.01.04 |