-榮-

문자열 인코딩 개념 정리- ASCII / ANSI / EUC-KR / CP949 / UNICODE / UTF-8 본문

카테고리 없음

문자열 인코딩 개념 정리- ASCII / ANSI / EUC-KR / CP949 / UNICODE / UTF-8

xii.xxv 2024. 1. 10. 20:00

1. ASCII (American Standard Code for Information Interchange)

  • ASCII는 최초의 문자열 인코딩
  • 7bit로 구성
  • 영어를 위한 문자, 숫자, 특수문자, 기호 등 128개 문자를 표현 (2^7 == 128)
  • 영어를 위한 문자(American Standard Code)이기 때문에 다른 언어는 표현이 불가능

 

2. ANSI (American National Standard Institute)

  • ANSI는 ASCII의 확장판 느낌으로 영어 이외의 다른 언어를 지원할 목적으로 만들어짐
  • 8bit로 256개의 문자를 표현
  • 앞의 7bit는 ASCII와 동일하며, 뒤의 1bit로 다른 언어의 문자표를 의미
  • 각 언어별로 Code 값을 가짐 - CodePage
  • ANSI = ASCII(7bit) + CodePage(1bit)

 

3. EUC-KR (Extended Unix Code-Korea)

  • 한글 지원을 위해 유닉스 계열에서 나온 완성형 코드 조합
  • 완성형 코드 - 완성된 문자 하나하나에 코드 번호를 부여한 것
  • 반대의 개념, 조합형 코드 - 자음과 모음 각각에 코드 번호를 부여하여 초성, 중성, 종성을 조합하여 하나의 문자를 나타내는 방식
  • 2Byte로 하나의 문자를 표현
  • 한글 단어 2350자만 사전순으로 배열하여 모든 한글 단어를 표현하기에 역부족

 

4. CP949 (Code Page 949)

  • 한글 지원을 위해 윈도우즈 계열에서 나온 환장 완성형 코드 조합
  • 2Byte로 하나의 문자를 표현
  • EUC-KR이 사용하지 않는 나머지 바이트열을 활용하여 대부분의 한글 단어를 표현 가능
  • EUC-KR의 확장이므로 호환되며, EUC-KR에서 표현되지 않는 문자는 조합하여 표현
  • 949는 한국 페이지 번호를 의미
  • MS949, Windows-949라 부르기도 함
  • 윈도우 메모장에서 ANSI 인코딩으로 저장하면 CP949 방식에 의해 인코딩 된다.

 

◎ UNICODE
 - 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합
 - 전 세계의 기기들이 통일된 인코딩 방식을 사용할 수 있도록 하기 위해 고안
 - 2byte 숫자로 1:1 매핑시키는 ‘방식’ 
   (유니코드를 표현하는 여러 가지 인코딩 방식들이 존재)
 - UTF-8, UTF-16, UTF-32 등은 유니코드 기반의 문자들을 바이트열에 인코딩하는 방식
 
유니코드는 전 세계 문자들 각각에 맵핑된 코드들을 담고 있는 거대한 표이며, UTF-8 등의 인코딩 방식은 그러한 유니코드 표를 바탕으로 문자들을 바이트열에 표현하는 방식이라 생각

 

5-1. UTF-8 (Unicode Transformation Format - 8bit)

  • 유니코드를 위한 가변 길이 문자 인코딩(멀티바이트) 방식 중 하나
  • ANSI의 단점 보완을 목적으로 만들어짐
  • 멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣음
  • ANSI는 다국어를 지원하기 위해 CodePage 정보를 미리 알고 있어야 한다.
  • 멀티바이트란 표현해야 하는 문자에 따라 글자 크기를 가변으로 변경하여 사용하는 것
  • 멀티바이트(1~4bytes)로 최대 1,112,064자를 표현 가능 
  • ANSI는 고정바이트(1byte) 형태로 최대 256자 표현 가능
  • 첫 128자는 ASCII 코드 값으로 ANSI와 UTF-8이 동일
  • 영어를 사용할 경우 1byte만 사용, 중동지역 언어 또는 많은 유럽 언어가 2bytes, 한국 중국, 일본 등 동아시아권 언어는 3bytes이상을 사용

 

5-2. UTF-16

  • 16bit 기반으로 저장하는 UTF-8의 변형
  • 자주 사용하는 문자는 2byte, 그렇지 않은 문자는 4byte로 표현
  • 한글의 경우, UTF-16으로 저장하면 2bytes면 되어 용량의 이점이 있다.
  • UTF-8로 저장하면 3bytes가 필요
  • 경우에 따라서는 2bytes 이상을 사용할 경우도 있어 큰 이점은 아니다.
  • Byte Ordering을 고려함에 따른 복잡성 증대와 ANSI와 호환이 안 되는 단점이 있다.
  • Byte Ordering은 데이터가 저장되는 순서로, Rettle Endian과 Big Endian 방식이 있다.

 

5-3 UTF-32

  • 모든 문자를 4byte의 고정 길이로 인코딩
  • 코드 변형 규칙이나 가변 길이에 대한 특별한 고려를 하고 싶지 않을 때, 일관성 있고 단순한 방식으로 문자열을 처리할 수 있다는 장점
  • 하나의 문자를 저장하는데 너무 많은 저장 공간이 사용되고 Byte Ordering을 고려함해야 하는 문제가 있어 자주 사용되지 않는다.