컴퓨터 공학 - ASCII, Unicode 학습

ASCII 란?

  • 미국에서 정의한 표준화한 부호체계
  • 7bit 까지만 사용 가능
    • 2^7 = 128개의 고유한 값
    • 컴퓨터의 기본 저장 단위는 1바이트(8비트) 이지만, 아스키 코드는 1비트를 통신 에러 검출 목적으로 사용
  • ASCII 코드
    ASCII

Unicode 란?

  • 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드
  • 아스키코드로 0×41=A로 매핑된 것 처럼, 아스키코드로 표현할 수 없는 문자들을 유니코드라는 이름 아래 전 세계의 모든 문자를 특정 숫자(키)와 1:1로 매핑한 것
  • 2byte = 16bit = 2^16 = 65,536개로 표현 가능
  • 유니코드 3.0 버젼까지는 2바이트 영역을 기본다중언어판(BMP)이라 불렀고, 더 많은 언어를 담기 위해 유니코드 3.0부터 보충언어판(Supplementary Planes)을 추가로 정의함
    • 보충언어판으로 상위대행(1024자), 하위대행(1024자)로 할당한 뒤, 이 둘의 조합으로 1024 × 1024 = 1,048,576 약 백만개가 넘는 문자를 추가로 정의함
  • 유니코드에는 총 100만개(기본언다중언어판 + 보충언어판)가 넘는 코드를 지정할 수 있게 되었고, 이를 2^16개의 문자씩 담아 17개 구역(=(2^16 + 2^20)/2^16)으로 분리함
    • 1개의 기본언어판(BMP) + 16개의 보충언어판(SMP)

Unicode 인코딩

  • 0xac00(unicode) –> memory에 저장할 때, utf-8, utf-16, utf-32 (가변표기인코딩) 인코딩
    • 한글의 범위 : U+AC00 ~ U+D7AF
    • utf-8 : 1byte(8bit) 사용(영어, 숫자, ASCII), 아시아문자는 3byte(24bit)로 사용
    • utf-16 : BMP(1차평면) -> 2byte(16bit) 사용, 그 이상의 문자는 4byte로 인코딩
    • utf-32 : 4byte(32bit) 사용
  • encode 하는 순간, 메모리 통신에 사용되는 바이트 단위로 변환된다.
  • 0xac00에서 little endian 방식으로 00ac 표현(ac, 00은 각각 1byte이므로, 00ca가 아닌 00ac)
    • ex. 1423 –> 왼쪽으로 읽으면, big endian 방식
    • 3241로 오른쪽부터 읽으면, little endian 방식으로 보내기로 규정함
    • 인텔에서 little endian을 사용하므로, 대부분 컴퓨터는 little endian 방식 사용
    • network 통신 시, big endian 방식 사용

유니코드의 부호화 방식

  • a = ‘가’

    1. a.encode(‘utf8’) –> EAB080
    2. a.encode(‘utf16’) –> 00AC
  • UTF-8 구조 : 1110XXXX 10XXXXXX 10XXXXXX

    • ex. AC00 –> 1010 1100 0000 0000 –> 11101010 10110000 10000000 –> EAB080
  • a = ‘가’ –> a.encode() (부호화) –> EAB080 –> a.decode() (복호화) –> ‘가’