Computer Science

인코딩과 코드표

Prower 2023. 7. 23. 19:11
728x90
반응형

인코딩

사용자가 입력한 문자, 숫자, 특문 등의 데이터를 컴퓨터에 저장할 수 있는 이해하는 이진 데이터로 변환하는 것

문자, 숫자, 특문 등은 사람이 이해할 수 있지만, 이진 체계 저장소에 이를 저장하기 위해서는 0,1의 이진 데이터로 변환해야 한다.

현재 이 글도 문자로 출력되고 있지만, 저장소에 저장된 데이터 자체는 결국 0,1의 이진 데이터이며, 이를 OS가 읽어 문자로 출력한다.

반대로 이진 데이터를 사람이 읽을 수 있는 데이터로 변환하는 것을 디코딩이라고 한다.

코드표

문자 데이터를 이진 데이터로 변환하기 위해서는 서로 합의된 약속이 필요하다. 여기서 사용하는 것이 코드표이다.

  • 컴퓨터에서 문자를 표현하기 위해 문자 - 코드가 1:1로 매핑된 표

코드표에는 우리가 사용하는 문자와 그에 해당하는 코드(숫자)가 매핑된 정보가 저장되어있다.

문자를 4 비트로 저장하는 예시

문자 10진 2진
a 10 1010
  • 문자 a가 10이라는 10진수에 매핑되어 있다면 이는 2진수로 1010이고 컴퓨터에 1010이 저장된다.
  • 문자를 출력할 때는 1010이 a에 매핑되어 있으므로 이를 a로 변환하여 출력한다.

이처럼 코드표는 문자 - 이진 데이터간 변환을 위해 사용하는 약속이며, 여러가지 코드표가 존재한다.

ASCII

  • 1byte 체계. 문자 하나를 저장하는데 1byte를 사용한다.
  • 10진수 0 ~ 127에 128개의 문자(영 대/소문자, 숫자, 일부 특문)가 매핑됨
  • 1byte(8bit) 중 맨 앞자리 1bit는 에러 검출에 사용

Unicode

영미권이 아닌 다른 국가에서 컴퓨터를 사용하면서 각 국가의 문자를 저장하기 위한 여러 코드표가 사용되었다.

그러나 네트워크가 발전하면서 각기 다른 국가의 데이터를 출력하는 과정에서 코드표 통일되지 않아 문자가 깨지는 현상이 발생했다. 우리나라에서는 0000 0001을 'ㄱ'으로 저장/출력하지만 다른 코드표를 사용하는 국가에서는 0000 0001을 'a'나 다른 문자로 출력하는 상황이 발생

이러한 상황을 해결하기 위해 국제적으로 모든 문자를 출력할 수 있는 공통된 표준 코드표가 만들어 졌으며 이를 유니코드라 한다.

UTF-8(Unicode Transformation Format-8bit)

위에서 인코딩은 문자 데이터를 컴퓨터가 이해하는 이진 데이터로 변환하는 것이고, 코드표는 그 변환을 위한 약속된 매핑표라 했다. UTF-8은 유니코드라는 매핑표를 참조하여 문자를 이진 데이터로 변환하는 인코딩 방식의 하나이다.

  • UTF-8: 유니코드 기반의 인코딩 방식

유니코드만으로는 문자를 이진 데이터로 변환할 수 없다. 코드표는 말 그대로 문자를 코드로 변환하기 위한 참조용일 뿐이며, 인코딩 과정에서 이를 사용한다

인코딩 방식

UTF-8은 가변 길이 인코딩 방식이다. 문자 데이터를 저장하기 위해 사용하는 데이터 크기가 문자 마다 다르다.

  • 최대 저장 가능한 데이터 크기는 6byte
    • 다른 인코딩과의 호환을 위해 4byte 까지만 사용
  • 문자와 매핑되 코드표에 따라 1 ~ 4byte를 할당하여 데이터를 저장
    • 1btye인 경우(ASCII 코드)
      • 첫 bit에 0을 할당하고 나머지에 ASCII 코드에 따라 데이터 저장
    • 2byte 이상인 경우
      • 첫 byte에 얼마 만큼의 byte를 사용할지 지정
      • 나머지 byte에 연결된 byte임을 표시하기 위해 첫 bit 자리에 ㅇㄹ
        • 2byte: 110, 3byte: 1110, 4byte: 11110

예시

문자 16진수 10진수 2진수 UTF-8 변환
a 0x0061 91 1100001 01100001
0xAC00 767 1010110000000000 11101010 10110000 10000000
  • 문자 'a'는 유니코드표 상에서 0x0061(16진수), 91(10진수), 1100001(2진수) 라는 코드로 변환된다. 이는 ASCII 코드표를 참조해도 동일하다.
  • 저장소에 저장하기 위한 형태인 2진수를 UTF-8을 통해 인코딩하면 1byte만 사용하기 때문에 그대로 01100001를 저장하게 된다.
  • 문자 '가'는 유니코드표 상에서 0xAC00(16진수), 767(10진수), 1010110000000000(2진수) 라는 코드로 변환된다
  • 2진수를 UTF-8을 통해 인코딩하면 3byte를 사용하기 때문에 첫 byte에 1110 이 첫 bit 자리에 추가되고, 나머지 byte에 10이 첫 bit 자리에 추가된다. 나머지 bit 자리에는 2진수 데이터가 저장된다.

 

728x90
반응형