ASCII

  • ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 란 1963년 미국 국립 표준 협회(American National Standards Institute, ANSI)에서 표준화한 7비트 문자/부호 체계로, 전신에서 사용되기 시작해 8비트 컴퓨터에서도 활용되면서 현재 전세계의 컴퓨터 문자/부호 인코딩 체계에서 핵심이 되는 문자/부호 체계로 받아들여진다.

  • 000부터 127까지 총 128개의 부호가 지정되어 있는데, 컴퓨터의 ASCII 인코딩에서는 1바이트를 구성하는 8비트 중에서 최상위 비트는 0으로 고정해 나머지 7비트를 사용하는 1바이트 길이로서 사용한다.

    • 1바이트를 구성하는 8비트 중 최상위 비트의 경우 IBM System/360 같은 예전 컴퓨터에서는 통신 과정에서의 무결성을 확인하기 위한 parity bit로서 사용된 적 있으나, 현재는 쓰이지 않는다.

ISO/IEC 8859

  • ASCII 인코딩은 영어 알파벳과 간단한 수학 연산자만으로 이루어져 있어, 출판물에서 사용되는 것 같은 다양한 문장부호나 유럽 알파벳에서 사용되는 diacritic, 그외 여러 나라의 문자들을 표현하는 데는 제약이 있다. 이를 표현하기 위해 ASCII 기반으로 여러 컴퓨터 제조사에서 독자적인 문자 인코딩 체계를 도입해 사용하기 시작했는데, 가장 흔히 사용되는 방식이 1바이트를 구성하는 8비트 중 최상위 비트를 1로 사용하는 추가적 문자들을 정의해 사용하는 것이다. 그러나 이러한 정의 체계는 제조사마다 독자 규격으로 발전하여 호환되지 않아, 점차 표준화의 필요성이 나타나기 시작했다.

  • 이를 표준화한 대표적인 인코딩이 ISO/IEC 8859 으로, 상기한 바와 같이 1바이트를 구성하는 8비트 중 최상위 비트를 1로 사용하는 추가적 문자들을 정의하는 방식을 표준화함으로써 이 문제를 해결했다. 전세계적으로 사용되는 문자 종류가 다양하기 때문에 하나의 인코딩으로 전세계에서 필요한 모든 문자 인코딩 체계를 표준화한 것은 아니며, 확장영역에 어떤 문자/부호를 매핑했는가에 따라 나뉘는데, 대표적으로 다음과 같은 표준이 있다.

    • ISO/IEC 8859-1
      • 네덜란드어, 노르웨이어, 덴마크어, 독일어, 로만슈어, 스웨덴어 스코틀랜드 게일어, 아이슬란드어, 아일랜드어, 에스파냐어, 영어, 이탈리아어, 페로어, 포르투갈어, 프랑스어, 핀란드어, 동유럽의 알바니아어, 아프라카의 스와힐리어, 아프리칸스어
    • ISO/IEC 8859-2
      • 보스니아어, 슬로바키아어, 슬로베니아어, 체코어, 크로아티아어, 폴란드어, 헝가리어
    • ISO/IEC 8859-3
      • 몰타어, 튀르키예어, 에스페란토
    • ISO/IEC 8859-4
      • 에스토니아어, 라트비아어, 리투아니아어, 그린란드어, 사미어.
    • ISO/IEC 8859-5
      • 러시아어, 마케도니아어, 벨라루스어, 불가리아어, 세르비아어, 우크라이나어.
  • ISO/IEC 8859 인코딩으로 작성된 텍스트 파일의 경우, 파일에 작성된 바이트 값만으로 그것이 ISO/IEC 8859 인코딩 중 어느 것에 해당하는지를 알 수 있는 방법은 없다. 따라서 이 인코딩으로 작성된 텍스트 파일을 적절히 해석하려면 텍스트 파일을 여는 사람이 텍스트 파일 뷰어에서 인코딩 유형을 수동으로 적절히 선택해야 한다.

ISO/IEC 2022와 확장 유닉스 코드(Extended Unix Code, EUC)

  • ASCII 및 ISO/IEC 8859 인코딩과 같이 1바이트로 문자를 표현하는 인코딩 표준은 특히 한국어, 일본어, 중국어 같이 수많은 문자를 사용하는 언어를 표현하는 데 제약이 크기 때문에, 2바이트 이상의 바이트로써 문자 및 부호를 표현하기 위한 표준의 필요성이 나타났다. ISO/IEC 2022 는 이를 위한 표준이나, ISO/IEC 8859와 달리 구체적인 인코딩 매핑에 관한 표준은 아니며 어떤 문자체계에 관해 2바이트 이상 길이로 문자/부호를 표현하는 새로운 인코딩 표준을 제시할 때 이를 위한 표준화 스펙을 제공하는 표준이라 할 수 있다.

  • 중국어, 한국어, 일본어에 관한 인코딩 표준의 필요성이 대두되어, ISO/IEC 2022 의 일부 개념을 사용한 인코딩 표준이 나타나기 시작했다. 유닉스 호환 시스템에서 사용될 목적으로 제시되었기 때문에 이들 인코딩 표준의 이름에는 prefix로 EUC라는 표현이 붙는다. 예를 들어 중국어에 관한 ISO/IEC 2022 호환 인코딩은 EUC-CN, 한국어에 관한 ISO/IEC 2022 호환 인코딩은 EUC-KR 로 불린다.

  • EUC 인코딩은 모두 ASCII를 바탕으로 1-2바이트로 문자를 표현하며, 한 바이트의 최상위 비트가 0이면 ASCII 문자로, 1이면 그 다음 바이트(trail byte)까지 포함하여 총 2바이트가 하나의 문자를 구성하는 것으로 해석한다.

    • 한 바이트의 최상위 비트가 1일 때(lead byte), trail byte의 최상위 비트는 0일 수도 있고 1일 수도 있다.

      • EUC-JP: trail byte의 최상위 비트는 0일 수도 있고(0x21-0x7E) 1일 수도 있다(0xA1-0xFE).
      • EUC-JIS-2004, EUC-KR: trail byte의 최상위 비트는 항상 1이다(0xA1-0xFE).
  • EUC 인코딩으로 작성된 텍스트 파일의 경우 또한, 파일에 작성된 바이트 값만으로 그것이 EUC 인코딩 중 어느 것에 해당하는지를 알 수 있는 방법은 없다. 따라서 이 인코딩으로 작성된 텍스트 파일을 적절히 해석하려면 텍스트 파일을 여는 사람이 텍스트 파일 뷰어에서 인코딩 유형을 수동으로 적절히 선택해야 한다.

EUC-KR와 CP949

  • EUC-KR로 표현할 수 있는 완성형 한글은 2350자에 불과한데, 표현 가능한 한글의 수는 1만 자도 넘을 수 있으므로 EUC-KR로 표현 가능한 한글의 종류는 큰 제약이 있다.

  • 따라서 Microsoft Windows에서는 EUC-KR을 확장한 CP949라는 독자적 한글 인코딩을 사용하여 보다 많은 글자를 표현한다.

유니코드

  • 컴퓨터와 인터넷이 점점 발전하여 점차 통합된 문자 인코딩 체계의 필요성이 강해지고 있으나 지역마다 다른 방향으로 인코딩이 발전하고 있어, 통합된 표준이 나타날 필요성이 대두되었다. 이에 따라 가능한 모든 문자들을 하나의 통합된 인코딩 체계로 관리하는 표준으로서 UCS-2(Universal Character Set - 2 byte)가 제시되었으나, 이는 최대 65536개의 문자만 표현할 수 있고 앞으로 쓰이게 될 문자는 그보다 더 많았으므로 곧바로 한계에 부딪혔다.

  • 이를 해결하기 위한 대안으로서 유니코드(Unicode)가 1991년 제시되었는데, 구체적으로 다음과 같다.

    • UTF-8

      • ASCII와 통합하여, 한 문자를 표현하기 위해 최소 1바이트, 최대 4바이트를 사용하며 표현할 수 있는 문자의 종류는 1,114,112 가지이다.
    • UTF-16

      • UCS-2와의 호환성을 고려하여, 한 문자를 표현하기 위해 2바이트 혹은 4바이트를 사용한다. 표현할 수 있는 문자의 종류는 역시 1,114,112 가지이다.
    • UTF-32

      • UCS-2의 확장 스펙인 UCS-4와의 호환성을 고려하여, 한 문자를 표현하기 위해 4바이트를 사용한다. 표현할 수 있는 문자의 종류는 역시 1,114,112 가지이다.
  • 유니코드 표준에 포함된 문자는 모두 각각 고유의 유니코드 코드 포인트를 갖는다. 이는 U+ 라는 prefix와 함께 hex 값으로 정의되는데, 실제 UTF-8, 16, 32 인코딩으로 변환될 때 각 자릿수별 바이트값은 이 유니코드 코드 포인트로부터 계산할 수 있다.

UTF-8

  • 1바이트 (0xxxxxxx)

    • ASCII 문자만 포함, 7비트를 사용하여 U+00부터 U+7F까지 표현.
  • 2바이트 (110xxxxx 10xxxxxx)

    • 비ASCII 문자를 포함, 11비트를 사용하여 U+80부터 U+7FF까지 표현.
  • 3바이트 (1110xxxx 10xxxxxx 10xxxxxx)

    • 16비트를 사용하여 U+800부터 U+FFFF까지 표현.

    • 한글 완성형 11,172자의 유니코드 코드 포인트 U+AC00부터 U+D7A3(가-힣), 조합형 자모의 유니코드 코드 포인트 U+1100부터 U+11FF, 추가 자모 U+A960부터 U+A97F까지가 모두 이 영역에 포함된다.

  • 4바이트 (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)

    • 최대 21비트를 사용하여 U+10000부터 U+10FFFF까지 표현, 유니코드의 모든 코드 포인트를 커버.