본문 바로가기
Computer Science

[cs] 텍스트 표현

by oagree0123 2022. 1. 20.

이 글은 '한 권으로 읽는 컴퓨터 구조와 프로그래밍' 을 정리하여 작성한 글입니다.


텍스트 표현

컴퓨터에서 수를 사용해 문자나 키보드에 있는 다른 기호 등을 표현하는 방법입니다.

 

아스키코드 (ASCII)

(American Standard Code for Information Interchange)

  • 여러 아이디어 중 1963년부터 가장 많이 쓰이는 코드
  • 정보 교환을 위한 미국 표준코드
  • 키보드에 있는 모든 기호에 대해 7비트 수 값을 할당

 

경쟁에서 패배한 아이디어

확장 BCD 교환 코드 (EDCDIC) - 펀치 카드에 사용한 인코딩을 기반으로 만들어진 코드

 

[아스키 코드표]

아스키코드 표를 보면 'A'라는 글자의 10진 값은 65, 16진 값은 0x41 이라는 것을 볼 수 있습니다.

 

제어 문자, Control Character

  • 글자를 출력하는 것이 아닌 장치를 제어하기 위해 쓰이는 용도
  • 제어 문자 중 상당수는 통신 제어를 위한 문자
    (ex, ACK - '메시지를 받았음', NAK - '메시지를 받지 못했음')

 

다른 표준의 진화

  • 컴퓨터가 널리 쓰이게 됨에 따라 여러 언어를 지원해야할 필요가 늘었음
  • 국제 표준화 기구에서(ISO), 유럽 언어에 필요한 엑센트 기호나 발음 구별 기호 추가
  • 일본, 중국어, 아랍어, 한국어 등 다양한 표준도 생겼음

 

위와 같이 각기 다른 표준이 생긴 이유는 비트가 지금보다 비싼 시절에 표준이 만들어 졌기 때문에 7비트나 8비트에 욱여 넣기 위해서 입니다. 이후 비트 가격이 떨어짐에 따라 유니코드(Unicode) 라는 새로운 표준이 등장했고 문자에 16비트 코드를 부여했습니다. 지금은 21비트까지 확장되었습니다.

 

유니코드(Unicode)

  • 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
  • U+ 라는 접두어가 붙어있으면 유니코드 라는 의미
  • 아스키코드의 0x41은 대문자 A이고, 이를 유니코드표에서 찾으면 U+0041

 

유니코드 변환 형식 8비트 (UTF-8)

  • 유니코드의 문자 코드에 따라 각기 다른 인코딩을 사용하는 가변 길이 문자 인코딩 방식 중 하나
  • UTF-8 방식이 하위 호환성과 효율성 때문에 가장 널리 쓰임

 

인코딩(encoding)

다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴

 

 

UTF-8 인코딩 방법

  • UTF-8은 문자를 8비트 덩어리(옥텟, octet)의 시퀀스로 인코딩
  • 첫 번째 덩어리의 MSB 쪽에 있는 비트들이 옥텟의 시퀀스 길이를 표현
  • 모든 아스키 코드는 하나의 옥텟으로 표현할 수 있어 호환이 좋음

 

UTF-8로 변환된 유니코드 문자의 용량

  • 1바이트(8비트)를 차지하는 글자는 U+0000~007F 영역으로서, 아스키 코드의 127개의 문자
  • 2바이트(16비트)를 차지하는 글자는 U+0080~07FF 영역으로서, 유니코드/0000~0FFF의 일부인 제어문자, 라틴어, 음성기호, 조정문자, 결합문자, 그리스어, 키릴(러시아어 등), 아르메니아어, 히브리어, 아랍어, 시리아어, 타나문자(몰디브), 은코문자(아프리카)의 1920개의 문자
  • 3바이트(24비트)를 차지하는 글자는 U+0800~FFFF 영역으로서, 유니코드/0000~0FFF의 일부부터(사마리아 문자~) 유니코드/F000~FFFF까지라는 유니코드 대부분의 문자들 6만여개가 포함(한글은 3바이트 구간)

 

 

  1. UTF-8은 가변바이트를 사용하기 때문에, 1바이트로 표현이 충분한 A같은 경우는 0x41로 표현
  2. 다음 π 기호의 유니코드는 2개의 옥텟을 사용하되, 첫 번째 덩어리의 MSB 3비트를 110으로 시작하고
    두 번재 덩어리의 MSB 2비트는 10으로 시작
  3. 한글 '한'은 3개의 옥텟을 사용하여 표현

'Computer Science' 카테고리의 다른 글

[CS] 계층적인 데이터 구조  (0) 2022.02.15
[CS] 아날로그 처리 방법  (0) 2022.02.09
[CS] 메모리 계층과 성능  (0) 2022.02.03
[CS] 논리 게이트  (0) 2022.01.25

댓글