[IT상식] 멀티바이트 유니코드 관련해서 개념정리
멀티바이트 유니코드 개념 정리
Multi-byte Unicode, UTF-8, UTF-16, UTF-32 구조와 동작 원리
1. 유니코드란?
유니코드는 전 세계 모든 문자를 하나의 표준 코드로 표현하기 위한 문자 체계이다.
ASCII 확장 전 세계 문자 지원 멀티바이트기존 ASCII는 128개의 문자만 표현 가능했다.
A = 65 B = 66 C = 67
하지만 한글, 일본어, 중국어는 표현할 수 없었다.
2. 멀티바이트란?
멀티바이트는 하나의 문자를 여러 바이트로 표현하는 방식이다.
| 문자 | 바이트 수 |
|---|---|
| A | 1 byte |
| 가 | 2~3 byte |
| 😊 | 4 byte |
문자마다 사용하는 바이트 수가 다르다.
3. Unicode 구조
Character ↓ Code Point ↓ Encoding (UTF-8 / UTF-16 / UTF-32) ↓ Binary Data
문자는 Code Point를 가지고 있고 Encoding 방식에 따라 바이트가 결정된다.
4. Code Point 개념
A = U+0041 가 = U+AC00 😊 = U+1F60A
U+는 Unicode Code Point를 의미한다.
5. UTF-8 구조
| 바이트 수 | 범위 |
|---|---|
| 1 byte | 0~127 |
| 2 byte | 128~2047 |
| 3 byte | 2048~65535 |
| 4 byte | 65536 이상 |
A → 41 ga → EA B0 80
UTF-8은 가변 길이 인코딩이다.
6. UTF-8 바이트 패턴
1 byte : 0xxxxxxx 2 byte : 110xxxxx 10xxxxxx 3 byte : 1110xxxx 10xxxxxx 10xxxxxx 4 byte : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
앞 비트로 바이트 수를 구분한다.
7. UTF-16 구조
| 구성 | 설명 |
|---|---|
| 2 byte | 기본 문자 |
| 4 byte | Surrogate Pair |
가 → AC00 😊 → D83D DE0A
UTF-16은 2바이트 기반이다.
8. UTF-32 구조
모든 문자를 4 byte로 표현
| 장점 | 단점 |
|---|---|
| 단순 구조 | 용량 큼 |
| 빠른 처리 | 메모리 낭비 |
9. UTF 비교
| 방식 | 특징 |
|---|---|
| UTF-8 | 가변 길이, 웹 표준 |
| UTF-16 | Windows 내부 사용 |
| UTF-32 | 고정 길이 |
10. 멀티바이트 문제
- 문자 길이 계산 오류
- 버퍼 오버플로우
- 문자 잘림
- 인코딩 오류
strlen("가") → 3
문자 1개지만 3바이트로 계산된다.
11. C/C++에서 유니코드
char* wchar_t* UTF-8 UTF-16
wchar_t str[] = L"가나다";
Windows는 UTF-16 기반이다.
12. 포렌식/리버싱 관점
- 메모리 문자열 분석
- UTF-16 패턴 탐색
- 멀티바이트 문자열 복구
- 인코딩 변환 확인
13. 핵심 정리
- Unicode는 문자 표준
- 멀티바이트는 여러 바이트로 문자 표현
- UTF-8은 가변 길이
- UTF-16은 Windows 기반
- UTF-32는 고정 길이
멀티바이트 유니코드를 이해하면 문자열 분석과 메모리 분석이 쉬워진다.
댓글
댓글 쓰기