[IT상식] 멀티바이트 유니코드 관련해서 개념정리

멀티바이트 유니코드 개념 정리

멀티바이트 유니코드 개념 정리

Multi-byte Unicode, UTF-8, UTF-16, UTF-32 구조와 동작 원리

1. 유니코드란?

유니코드는 전 세계 모든 문자를 하나의 표준 코드로 표현하기 위한 문자 체계이다.

ASCII 확장 전 세계 문자 지원 멀티바이트

기존 ASCII는 128개의 문자만 표현 가능했다.

A = 65
B = 66
C = 67

하지만 한글, 일본어, 중국어는 표현할 수 없었다.

2. 멀티바이트란?

멀티바이트는 하나의 문자를 여러 바이트로 표현하는 방식이다.

문자바이트 수
A1 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 byte0~127
2 byte128~2047
3 byte2048~65535
4 byte65536 이상
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 byteSurrogate Pair
가 → AC00
😊 → D83D DE0A

UTF-16은 2바이트 기반이다.

8. UTF-32 구조

모든 문자를 4 byte로 표현
장점단점
단순 구조용량 큼
빠른 처리메모리 낭비

9. UTF 비교

방식특징
UTF-8가변 길이, 웹 표준
UTF-16Windows 내부 사용
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는 고정 길이

멀티바이트 유니코드를 이해하면 문자열 분석과 메모리 분석이 쉬워진다.

댓글

이 블로그의 인기 게시물

[Windows 분석] ShellExperienceHost.exe의 역할과 CPU 점유율 해결법 (엔지니어 가이드)

[Intel 보안 분석] jhi_service.exe의 정체와 인텔 관리 엔진(ME)의 역할