[CS] 문자 집합(Character Set), 인코딩(Encoding), 디코딩(Decoding)

2025. 6. 4. 23:59·CS 공부/컴퓨터 구조

 

컴퓨터는 0과 1만 이해할 수 있다. 그렇다면 문자(예: 한글, 영어 알파벳, 숫자 등)는 어떻게 0과 1로 표현되어 모니터에 출력될까? 이를 이해하려면 세 가지 개념을 반드시 알고 있어야 한다.

✅ 문자 집합(Character Set)

  • 컴퓨터가 인식하고 표현할 수 있는 문자들의 “모음집”
  • 이 집합에 속한 문자만 컴퓨터가 이해할 수 있고, 속하지 않은 문자는 인식하지 못한다.
  • 예:
    • ASCII: 영어 알파벳·숫자·기본 특수문자 128개
    • EUC-KR / CP949: 한글 완성형 약 2,350자 (EUC-KR), 확장 약 11,000자 (CP949)
    • Unicode: 현대 대부분의 문자, 기호, 이모티콘까지 포함한 통일된 집합

✅ 인코딩(Encoding)

  • 사람이 읽는 문자(예: “가”, “A”, “1”)를 0과 1 비트 열로 변환하는 과정
  • 인코딩 후 생성된 비트 배열을 “문자 코드”라 한다.
  • 동일한 문자 집합도 인코딩 방식에 따라 서로 다른 비트열을 가질 수 있다.
  • 예) 문자 집합 = ASCII - “A” → 65 (코드 포인트) → 7비트 인코딩(ASCII) → 1000001₂

✅ 디코딩(Decoding)

  • 인코딩의 반대 과정으로, 0과 1로 이루어진 문자 코드를 다시 사람이 읽을 수 있는 문자로 변환하는 과정

1️⃣ 아스키 코드(ASCII)

✅ 개요

  • 1960년대 초에 등장한 영어권 표준 문자 집합
  • 0~127까지 총 128개 문자만 포함
  • 영문 대·소문자, 숫자, 기본 특수문자, 제어문자(CR, LF 등) 포함

✅ 비트 구조

  • 7비트 표현 → 최대 2⁷ = 128문자
  • 실제 저장·전송 시에는 8비트(1바이트)를 사용하지만, 그중 1비트는 오류 검출용 패리티 비트로 쓰이므로 실질 문자 표현은 7비트

✅ 코드 포인트 예시

문자   코드 포인트(decimal)   2진수(7비트)
------------------------------------------
'A'        65                 1000001₂
'a'        97                 1100001₂
'0'        48                 0110000₂
'$'        36                 0100100₂

✅ 장·단점

  • 장점
    • 매우 간단하고 가볍다
    • 영어권 환경에서는 호환성 좋음
  • 단점
    • 한글, 한자, 기타 비ASCII 문자 표현 불가
    • 128자밖에 지원하지 않으므로 영문 외 언어에는 부족

2️⃣ EUC-KR (한글 완성형 인코딩)

✅ 한글 인코딩의 특수성

  • 영어 알파벳은 알파벳을 쭉 이어 쓰면 단어가 되지만, 한글은 초성·중성·종성 조합으로 하나의 글자를 이룬다.
  • 따라서 한글 인코딩은 완성형 방식과 조합형 방식으로 나뉜다.
  1. 완성형(Precomposed) 인코딩
    • 초성·중성·종성이 결합된 완성된 글자 단위로 코드 포인트를 부여
    • 예: ‘가’(ㄱ+ㅏ) 하나를 2바이트(16비트) 코드로 단일 할당
    • 대표적 예: EUC-KR, CP949
  2. 조합형(Decomposed) 인코딩
    • 초성, 중성, 종성을 각각 비트열로 따로 할당한 뒤 조합하여 하나의 글자 표현
    • 예: ‘가’ → 초성(ㄱ) 코드 + 중성(ㅏ) 코드 → 최종 조합

✅ EUC-KR 특징

  • KS X 1001/1003 문자 집합 기반의 완성형 인코딩
  • 한글 2,350여 글자(완성형) + ASCII 94문자 포함 → 총 약 2,444개 문자 지원
  • **2바이트(16비트)**로 한글 한 글자를 표현
    • 16비트 → 네 자리 16진수(예: 0xB0A1)로도 표시 가능
  • 한글 2,350자를 제외한 미지원 글자는 표현 불가 (예: ‘쀍’, ‘퍽’ 등 일부 확장 글자)

✅ 비트 구조

문자 집합: KS X 1001 완성형  
- 1바이트: 0x00~0x7F → ASCII(문자)  
- 2바이트: 0xA1~0xFE(첫 바이트)  0xA1~0xFE(둘째 바이트)  
  → 2350여 한글 + 한자·특수문자 일부  

✅ 장·단점

  • 장점
    • 기존 ASCII와 호환 (ASCII 코드 0x00~0x7F 그대로 사용)
    • 당시 대부분의 웹·메일·문서 시스템에서 널리 지원
  • 단점
    • 모든 한글 조합 표현 불가 → 일부 글자 깨짐
    • 확장성이 낮아, 새로운 한글 문자 추가 어렵
    • 다국어(예: 일본어, 중국어, 한자) 동시 지원 불가

3️⃣ CP949 (확장 완성형)

✅ 개요

  • 마이크로소프트가 EUC-KR을 기반으로 한글 확장 및 일부 한자·기호 추가하여 만든 인코딩
  • 확장된 완성형 방식으로, EUC-KR에서 표현 못 하던 몇천 자를 추가 지원
  • 윈도우 계열(Windows 95 이후)에서 주로 사용

✅ 지원 범위

  • EUC-KR 기본 2,350자 + CP949 확장 영역 한글 약 11,000자 이상 지원
  • 일부 추가 한자, 기호, 특수문자 포함
  • 하지만 여전히 Unicode 전체 한글 조합(예: 과거 옛한글, 방언 등)을 모두 포함하지 않음

✅ 호환성

  • ASCII(0x00~0x7F) 및 EUC-KR(0xA1~0xFE 영역) 호환

4️⃣ 유니코드(Unicode)와 UTF-8

✅ 유니코드(Unicode) 문자 집합

  • 전 세계 모든 문자를 통일된 코드 포인트 체계로 관리
  • 한글, 한자, 일본어, 그리스어, 키릴문자, 이모티콘, 특수 기호 등 포함
  • 현재 U+0000 ~ U+10FFFF 범위(약 110만여 코드 포인트) 정의
  • 한글 초성·중성·종성 조합으로 생성되는 11,172자 완성형 한글(가(0xAC00)부터 힣(0xD7A3)) 포함

✅ UTF-8 인코딩

  • 가변 길이 인코딩 방식으로 1바이트부터 4바이트까지 사용
  • ASCII 범위(U+0000~U+007F): 1바이트(0xxxxxxx)
  • U+0080~U+07FF: 2바이트(110xxxxx 10xxxxxx)
  • U+0800~U+FFFF: 3바이트(1110xxxx 10xxxxxx 10xxxxxx)
  • U+10000~U+10FFFF: 4바이트(11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)

예시

  • 영어 ‘A’ (U+0041) → 0x41 → 1바이트: 01000001
  • 한글 ‘가’ (U+AC00) → 0xAC00 → 3바이트:→ 최종: 1110 1010 1011 0000 1000 0000 (3바이트, 0xEAB080)
  • 1) U+AC00 = 1010 1100 0000 0000₂ 2) 3바이트 패턴: 1110xxxx 10xxxxxx 10xxxxxx 3) 비트 분리: 1010 1100 0000 0000₂ → xxxxxxxx xxxxxxxx → 1010 1100 | 0000 0000 → 계속 이어 붙이기 4) 3바이트씩 채우면: 1110 1010 10 110000 10 000000 = EA B0 80₁₆

✅ UTF-16 인코딩

  • 2바이트(16비트) 단위로 저장하되, U+10000 이상의 문자는 서로게이트 쌍(Surrogate Pair)으로 표현
  • 기본 다국어 평면(BMP) 문자(U+0000~U+FFFF) → 1유닛(2바이트)
  • 보충 평면(SMP, U+10000~U+10FFFF) 문자 → 2유닛(4바이트)

✅ UTF-32 인코딩

  • 고정 길이 4바이트(32비트)로 모든 코드 포인트를 그대로 저장
  • 저장량이 크지만, 인덱싱·처리가 간편

5️⃣ 정리 및 비교표

항목 범위/용량 비트 단위 주요 특징

ASCII U+0000~U+007F (128자) 7비트(저장 시 8비트) 영어 알파벳·숫자·기본 특수문자, 호환성 좋음
EUC-KR KS X 1001 완성형 (약 2,350자) + ASCII 2바이트(16비트) 한국어 완성형 인코딩, 호환성 좋지만 모든 한글 미표현
CP949 EUC-KR 확장 약 11,000여자 지원 2바이트(16비트) EUC-KR 호환 + 확장 한글/한자, 윈도우 환경에서 널리 사용
Unicode U+0000~U+10FFFF (약 110만 코드) 가변(UTF-8), 2바이트(UTF-16), 4바이트(UTF-32) 전 세계 문자 통합, 다국어·이모티콘 지원
UTF-8 Unicode 범위 1~4바이트 가변 ASCII 호환, 웹 표준, 저장 효율 높음
UTF-16 Unicode 범위 2/4바이트 가변 BMP 문자는 2바이트, 보충 평면 문자 4바이트
UTF-32 Unicode 범위 4바이트 고정 인덱싱·처리 간편하지만 저장 용량 큼

6️⃣ 마무리

  • 문자 집합: 컴퓨터가 이해할 수 있는 문자들의 모음
  • 인코딩: 문자 → 0과 1 비트열로 변환
  • 디코딩: 0과 1 비트열 → 문자로 변환
  • 초기에는 **ASCII(128자)**가 사용되었고, 한국어 지원을 위해 EUC-KR / CP949 완성형 인코딩이 등장
  • 결국 전 세계 문자를 하나로 통합한 Unicode 문자 집합과, 이를 효율적으로 표현하는 UTF-8(웹 표준) 방식이 대세가 되었다

'CS 공부 > 컴퓨터 구조' 카테고리의 다른 글

[CS] 정보 단위와 수 체계 쉽게 정리하기  (0) 2025.06.04
[CS] 개발자를 위한 컴퓨터 구조 필수 개념 정리  (0) 2025.06.03
[CS] 컴퓨터 구조를 알아야 하는 이유  (0) 2025.06.03
'CS 공부/컴퓨터 구조' 카테고리의 다른 글
  • [CS] 정보 단위와 수 체계 쉽게 정리하기
  • [CS] 개발자를 위한 컴퓨터 구조 필수 개념 정리
  • [CS] 컴퓨터 구조를 알아야 하는 이유
hxngpy
hxngpy
비전공 개발자 화이팅
  • hxngpy
    hxngpy
    hxngpy
  • 전체
    오늘
    어제
    • 분류 전체보기 (62) N
      • ssafy 분반테스트 관련 공부 (13)
      • 알고리즘 (18) N
        • 백준 (16) N
        • SWEA (1)
      • 자료구조 (0)
      • BackEnd (24) N
        • JPA (7) N
        • Redis (7)
        • Spring (2)
        • JWT (8)
      • DB (1)
      • 데이터 분석 (1)
      • 꿀팁 (1)
      • CS 공부 (4)
        • 컴퓨터 구조 (4)
        • 운영체제 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JWT
    영속성 컨텍스트
    슬라이딩 윈도우
    addressparsing
    Java
    컴퓨터 구조
    시계열 데이터
    FigJam
    투포인터
    Spring
    CS
    구간 합
    spring boot
    백준
    Spring Security
    스프링 부트
    Redis
    JPA
    누적 합
    regionmapping
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hxngpy
[CS] 문자 집합(Character Set), 인코딩(Encoding), 디코딩(Decoding)
상단으로

티스토리툴바