ASCII

  • 7비트로 영문자만 처리하는 문자 인코딩
  • 대다수 컴퓨터가 8비트인 바이트 단위를 사용하므로, ASCII 문자를 저장하고 비트를 하나 더 확보할 수 있었다.
  • 워드스타에서는 32미만인 코드는 인쇄 제어 목적으로 사용했다.
  • IBM PC는 OEM 문자집합을 고안했는데, 이는 유럽 언어를 위한 몇몇 강조문자와 선그리기 문자를 사용할 수 있었다. 하지만 미국 이외의 지역에서 PC를 판매하기 시작하면서 온갖 OEM 문자 집합 형식이 나오기시작했으며, 각자 요오에 맞춰 128글자를 정의했따.
  • ANSI 표준 위원회에서느 ANSI 표준을 체계적으로 정리함에 따라 OEM 난투극이 끝났다. 하지만 여전히 지역에 따라 각기 다른 코드페이지를 만들었다.
  • 아시아에서는 문자집합이 8비트에 들어갈 수 없어, DBCS(Double Bytes Character Set)으로 부르는 두 바이트 문자 집합 시스템으로 해결했다.
    • 몇몇 글자는 1바이트고, 다른 글자는 2바이트에 저장해서, 문자열을 따라 쉽게 앞으로 나갈 수는 있지만, 뒤로 돌아오기에는 무척 어려운 구조다.

유니코드

  • 유니코드가 16비트를 차지한다는 말은 미신이다.
  • 지금까지 우리는 글자를 디스크나 메모리에 저장할 수 있는 비트 몇 개로 사상한다고 가정했다.
  • 유니코드에서는 글자는 코드 포인트라는 단순히 이론적인 개념으로 사상한다.
  • 유니코드는 각 알파벳에 존재하는 관념적인 철자마다 고유 번호를 붙연호앗고 이를 코드 포인트라고 부른다.
    • 예: U+0645
  • 유니코드는 단순히 코드 포인트 묶음이다.

유니코드 코드 포인트를 따르는 문자열을 저장하기 위한 인코딩 종류

  • UTF-8: ASCII 영역을 1byte로 완전히 떨어지게 하고 있는 인코딩 방법.

    • 1~4바이트의 가변적인 길이를 가진다.
First code pointLast code pointByte 1Byte 2Byte 3Byte 4Code points
U+0000U+007F0xxxxxxx128
U+0080U+07FF110xxxxx10xxxxxx1920
U+0800U+FFFF1110xxxx10xxxxxx10xxxxxx61440
U+10000U+10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx1048576
  • UCS-2: 2바이트 고정 길이. 유니코드 코드 포인트가 늘어나면서, 모든 문자를 표현할 수 없다.

  • UTF-16: 2 또는 4 바이트의 가변 길이를 가진다.

  • UCS-4: 4바이트 고정 길이.

  • 해당 인코딩이 유니코드 코드 포인트를 지원하지 않으면, 물음포 기호(?)나 상자 모양이 나타난다.

  • 하나의 웹서버에서 페이지마다 다른 인코딩을 사용해야 될 수 있어서 시스템 전체에 해당하는 Content-Type 헤더를 사용할 수 없다.

    • 이를 위해 HTML 파일 자체에 특별한 태그를 사용해서 Content-Type을 지정한다.
    • 흔히 사용하는 모든 인코딩을 32부터 127까지 문자가 동일하게 알파벳과 숫자로 사용하기에, 정상적인 글자로 시작하는 HTML 페이지 앞부분을 활용할 수 있다.
    • <head> 부분에서 가장 처음에 등장하는 메타 태그를 통해서 html 문서의 인코딩을 확인하게 된다.
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">