1. ANCII(American Standard Code for Information Interchange,아스키)

  • ASCII는 최초의 문자열 인코딩.
  • 7bit로 구성 영어를 위한 문자, 숫자, 특수문자, 기호 등 128개 문자를 표현
  • 영어만을 위해 만들어졌고, 일본어, 중국어 등 다른 언어는 표현 불가
  • 이후 다른 언어를 지원해야 할 필요가 생겨 ANSI가 생겨남.

2. ANSI(American National Standard Institue, 안시)

  • ANSI는 8bit로 구성되어 있으며 256개의 문자를 표현 가능.
  • ANSI는 ASCII의 확장판으로 이해하면 된다.
  • ASCII에서 1bit를 더 사용한 것
  • ANSI의 앞 7bit는 ASCII와 동일, 뒤에 1bit를 이용하여 다른 언어의 문자를 표현
  • 단, 새롭게 추가 된 128개 문자로는 모든 언어 표현 불가.
    • 그래서 CodePage를 부여 각 언어별로 Code값을 주고, Code마다 다른 문자열 표를 의미 하도록 약속
      • ANSI = ANCII(7bit) + CodePage(1bit)

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

  • EUC-KR 은 한글 지원을 위해 유닉스 계열에서 나온 완성형 코드 조합.
  • 완성형 코드란, 완성 된 문자 하나하나마다 코드 번호를 부여한 것
  • 조합형 코드란, 한글의 자음과 모음 각각에 코드 번호를 부여한 후, 초성, 중성, 종성을 조합하여 하나의 문자를 나타내는 방식.
  • EUC-KR은 ANSI를 한국에서 확장한 것으로 외국에서는 지원불가.

4. CP949(Code Page 949)

  • CP949는 한글 지원을 위해 windows 계열에서 나온 확정 완성형 코드 조합이다.
  • EUC-KR은 2byte의 완성형 코드로 2bytes 내에서는 표현할 수 이쓴 완성된 문자의 수가 한계가 있었다.
  • EUC-KR 개선하여 확장하여 만든 코드이며 949는 한국을 의미한다. 932=일본, 936=중국

5. UTF-8(Universal Coded Character Set + Transformation Format -8-bit)

  • UTF-8은 유니코드를 위한 가변 길이 문자 인코딩(멀티바이트) 방식 중 하나로, ANSI의 단점을 보완하기 위해 만들어졌다.
  • ANSI는 다국어를 지원하기 위해 CodePage 정보를 미리 알고 있어야한다.
  • 멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣었다.
  • ANSI는 고정바이트(1byte) 형태로 최대 256자 까지만 표현이 가능하나 UTF-8은 멀티바이트(1~4bytes)로 최대 1,112,064까지 표현가능
  • 첫 128자는 ASCII 코드 값으로 ANSI와 UTF-8이 동일. 그래서 영어로 사용할 경우 1bytes만 사용한다.
  • 2bytes를 사용하며, 중동지역 언어 또는 많은 유럽언어가 여기에 속한다. 한국,중국,일본 등 동아시아권 언어는 3byte 이상을 사용한다. 
  • UTF-8은 매우 일반적인 인코딩 방식이지만, 3bytes 이상의 문자를 사용할 경우에는 비효율적!
  • UTF-8 유니코드는 아스키 코드와 영문 영역에서는 100% 호환 만약, UTF-8 유니코드 문서에 한글 등이 전혀 없고 영문과 숫자로 이루어져 있다면 그 카드는 아스키코드와 동일 전 세계의 모든 언어를 하나의 파일에 쓸 수 있다

6. UTF-16(Universal Coded Character Set + Transformation Format -16-bit)

  • UTF-16은 16bit 기반으로 저장하는 UTF-8의 변형
  • 한글의 경우 UTF-8로 저장할 경우 3bytes가 필요한데, UTF-16으로 저장하면 2bytes면 되어 용량의 이점이 있음
  • 그러나 경우에 따라서는 2bytes이상을 사용할 경우가 있음
  • 엔디안 처리를 고려함에 따라 복잡성 증대나 ANSI호환이 안되는 단점

7. UTF-32 (Universal Coded Character Set + Transformation Format -32-bit)

  • UTF-32 는 모든 문자를 4bytes로 인코딩한다. 문자 변환 알고리즘이나 가변길이 인코딩 방식에 대한 고민을 하고 싶지 않을 때 사용함 
  • 매우 비효율적인 메모리 사용하므로 자주사용하지 않는다.

* UTF-8, UTF-16 모두 유니코드를 지원하기 위한 인코딩 방식이다. 이들을 이해하기 위해서는 유니코드에 대한 이해가 필요하다. 일반적으로 UTF-8과 유니코드를 동일하게 생각하는데 약간 차이가 있다.

 

8. UNICODE 

  • UNICODE는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합.
  • 주의해야 할 것이 '인코딩'이 아니라는 것. 유니코드는 전세계 거의 모든 문자를 2bytes 숫자로 1:1 매핑 시키는 '방식'을 말하고, 유니코드를 표현하는 여러가지 '인코딩' 방식들이 존재함.
  • 유니코드를 표현하는 여러가지 '인코딩' 방식들이 존재하는 것이다.UTF-8, UTF-16등이 그 인코딩 중 하나인 것
  • 유니코드_목록을 통해 매핑 테이블을 확인 가능 (유니코드_목록, 한글_목록)
    • 여기서 '가'를 찾아보면 유니코드 값이 'AC00'인 것을 알 수 있는데 16진수 AC00은 10진수로 44,032인데 8bit로 나누기에 너무 크다. 이 값을 8bit 단위로 쪼개어 저장하는 방법이 UTF-8이다.(쪼개는 방법 여기)
    • window 비스타 이상에서는 유니코드를 utf-16으로 인코딩한다.
    • 유니코드 값을 바로 사용하지 않고 UTF-8을 이용하여 사용하다보니 UTF-8=UNICODE 라 생각하기 쉬운데 그게 아니다. 

 

+ Recent posts