Notice
Recent Posts
Recent Comments
Link
변수의 기록
(컴퓨터 구조) 문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩 본문
CS지식/컴퓨터 구조 (Computer Architecture)
(컴퓨터 구조) 문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩
불광동 물주먹 2025. 6. 15. 22:44문자 인코딩 완전 정리: ASCII, Unicode, UTF-8, UTF-16, 그리고 URL/Base64 인코딩
1. 문자 인코딩의 시작: ASCII
개요
- ASCII (American Standard Code for Information Interchange)
- 1960년대 등장
- 7비트(0~127)로 구성되어 총 128개의 문자만 표현 가능
- 알파벳 대/소문자, 숫자, 일부 특수기호만 포함
한계
- 한글, 한자, 일본어 등 비영어권 문자 표현 불가
- 다국어 처리에 적합하지 않음
2. 확장 ASCII와 완성형 인코딩 (한글 등장 배경)
완성형(예: EUC-KR, CP949)
- 한글 표현을 위해 만들어진 한국어 문자 집합
- 한글의 완성된 글자 조합만 저장 (예: 가, 나, 다 등)
- 초성/중성/종성을 나눠 표현하지 못함
- MS Windows는 CP949, UNIX 계열은 EUC-KR 사용
문제점
- 국가별 문자표가 다 달라서, 문자 깨짐 현상 다수 발생
- 인터넷 시대에 이 문제는 더 심각해짐
3. 유니코드 (Unicode): 전 세계 문자 통일
개념
- 모든 문자에 고유한 번호(Code Point)를 부여하는 국제 표준
- 예시:
- A → U+0041
- 가 → U+AC00
- 你 → U+4F60
- 🐶 → U+1F436
구조
- 처음엔 **16비트 고정 길이(65536문자)**로 시작했지만,
한자, 이모지 등으로 부족해져 현재는 21비트 범위 사용 (U+0000 ~ U+10FFFF)
중요한 포인트
- 유니코드는 문자 자체가 아니라, 문자에 부여된 고유 번호이다.
- 실제 저장은 반드시 인코딩 방식을 거쳐야 한다.
4. UTF-8: 유니코드를 바이트로 저장하는 방식
등장 배경
- 인터넷에서는 영어(ASCII)와 호환성이 매우 중요했음
- 유니코드 자체는 영어와 호환되지 않음 → 새로운 인코딩 방식 필요
구조
- 가변 길이 인코딩 (1~4바이트)
- U+0000 ~ U+007F → 1바이트 (ASCII 그대로)
- U+0080 ~ U+07FF → 2바이트
- U+0800 ~ U+FFFF → 3바이트 (한글 대부분 포함)
- U+10000 ~ U+10FFFF → 4바이트 (이모지, 희귀 문자)
특징
- 영어 중심 사이트에서는 공간 효율성 매우 높음
- ASCII와 완벽 호환
- 웹, HTML, JSON 등 인터넷 표준 인코딩 방식
- UTF-8은 유니코드의 가장 널리 쓰이는 인코딩 방식
5. UTF-16: 유니코드를 2바이트 단위로 표현
구조
- 기본적으로 2바이트(16비트) 단위로 표현
- U+0000 ~ U+FFFF → 2바이트
- U+10000 이상 → Surrogate Pair라는 특수한 4바이트 조합 사용
방식
- 엔디안(Endian) 방식에 따라 저장 순서 달라짐
- UTF-16LE (Little Endian)
- UTF-16BE (Big Endian)
- BOM(Byte Order Mark)로 저장 순서 구분
사용처
- Windows 내부 시스템
- Java, .NET 환경의 내부 문자 표현 방식
6. URL 인코딩 (Percent Encoding)
개요
- URL에 사용할 수 없는 문자들을 % 기호와 16진수로 치환
- 공백 → %20
- 한글 ‘가’ → %EA%B0%80 (UTF-8 바이트 기반)
목적
- URL에서 특수문자, 공백, 한글 등이 깨지지 않게 하기 위함
- 웹 서버와의 통신 안정성 확보
7. Base64 인코딩
개요
- 이진 데이터를 텍스트로 안전하게 변환하는 방식
- 3바이트(24비트)를 6비트씩 나눠 4개의 문자로 표현
- A
Z, az, 0~9, +, / 등의 안전한 문자만 사용
용도
- 이메일 첨부 파일 (MIME)
- JWT 토큰
- 이미지 데이터 인코딩 (Data URI)
8. ASCII, Unicode, UTF-8/16 간 비교
구분 | ASCII | Unicode | UTF-8 | UTF-16 |
문자 수 | 128 | 100,000+ | 동일 | 동일 |
바이트 수 | 1 | 정의만 있고 인코딩 없음 | 1~4 | 2 or 4 |
가변 길이 | ❌ | - | ✅ | ✅ |
영어 호환성 | ✅ | ❌ | ✅ | ❌ |
인터넷 사용 | ❌ | ❌ | ✅ | 일부 |
다국어 지원 | ❌ | ✅ | ✅ | ✅ |
9. 실무에서 인코딩을 다룰 때 주의할 점
- 파일 저장 시: 파일 인코딩을 명시적으로 지정해야 함 (UTF-8 권장)
- 네트워크 통신 시: Content-Type 헤더에 charset=UTF-8 지정 필요
- 데이터베이스 설정: 문자셋/콜레이션 확인 (예: MySQL은 utf8mb4)
- 문자 깨짐 방지: 서버/클라이언트/DB 모두 인코딩 일치 필수
결론
- 유니코드는 문자에 부여된 "번호" 체계,
- UTF-8/UTF-16은 그 번호를 컴퓨터가 저장/이해 가능한 "바이트"로 바꾸는 인코딩 방식이다.
- UTF-8은 현재 웹과 시스템에서 가장 널리 사용되는 문자 인코딩이며,
기존 ASCII 기반 시스템과도 호환성을 유지하는 훌륭한 표준이다.