본문 바로가기
CSE/디지털 논리

[디지털 논리 3강] 문자 인코딩 방식(ASCII,Unicode,BCD 바이너리 인코딩,Gray Code,Parity Bit)

by 뜨거운 개발자 2023. 3. 26.

 

숫자 표현은 부동소수점과 sign비트등을 이용해서 공부하였다.

이번강에서는 문자 인코딩에 대해서 다뤄보겠다.

문자의 인코딩은 숫자를 문자로 일대일로 맵핑한다.

문자 인코딩

ASCII Code : 아주 오래된 미국의 표준이다.

  • 아스키코드는 7비트 인코딩이다!! (시험문제 ox문제) 8비트 아니다!
  • 33개의 컨트롤 문자와, 95개의 읽을 수 있는 문자를 가지고 있다.
  • 컨트롤 문자들은 몇개를 제외하고는 거의 사용되고 있지 않다.(역사적 이유때문에 남아있다.)
  • 아스키코드는 다른 문자 인코딩의 기본이다. (UTF-8은 아스키를 능가하지만 아스키 기반임)

사진을 보면 undefine가 있는데 이건 국가마다 다르다고 한다.

Extended ASCII Code(확장 아스키)

  • 8비트만 사용 (1바이트) - 부호비트 삭제됨.
  • 예시로 ISO/IEC 8859인데 이런 국가마다 다른 언어로 바꿨다.
    • ISO/IEC 8859-1 ~ ISO/IEC 8859-16 : 라틴계언어부터 불어 등등 까지.

Extended UNIX Code (EUC) (확장 유닉스 코드)

  • 이후 시간이 지나면서 아시아권 언어들이 들어오게 되면서 변화를 요구하게 됐다.
    • ex) 한국어, 중국어, 일본어 등
    • 한중일 인코딩에 주로 사용되는 멀티바이트 문자 인코딩시스템이다.
  • The structure of EUC is based on the ISO/IEC 2022 standard
  • EUC-KR은 완성형 (조합형과 대립이 있었지만 완성형으로 결정됨) (94*94 태이블 #:8836 으로 배열된다.)
    • 기호 및 숫자는 #1222
    • 미리 작성된 한글
  • 이제 UTF-8이 일반적이지만 EUC-KR은 여전히 사용되고 있어서 가끔 불일치 문제가 발생한다. (한글 깨지는 경우 발생)
    • 2021년 3월 기준 한국 웹페이지 10.8% 가 여전히 사용중.

DOS/Windows Code Pages

 

  • 윈도우95에서부터 사용된 문자 인코딩 세트이다.
    • 윈도우 95부터는 많은 공부를 하지 않고도 사용을 할 수 있게 됐다.
    • 윈도우 GUI에서 사용되는 코드페이지이다.
  • 한글이 확장완성형이 됐다. (#94 *94 이상)
    • 조합해서 모든 한글을 나타낼 수 있게 됐다.
    • 유니코드 2.0에서 사용할 수 있는 한글 세트에 영향을 미쳤다.

Unicode

  • 전세계 대부분 문자 체계에서 표현되는 텍스트의 이로간된 인코딩, 표현처리를 위한 국제 표준이다.
  • 현재 사용하는 유니코드 3.0에서는 총 143859개의 문자가 있다.
    • 이모티콘과 역사문자, 기호세트등이 포함돼있다.
  • 유니코드는 효율성을 위해 다양한 문자 인코딩으로 구현이 된다.
    • 유니코드 변환 방식 : UTF-8(1~4바이트) UTF-16 (2~4바이트) ,UTF-32(4바이트 고정폭)
  • 바이트 순서 표시(BOM) (유니코드 서명이라고도 한다.)
    • 엔디안을 알려주는 매직넘버이다.
    • BOM은 UTF-8뿐 아니라 UTF-16, 32에서도 선택사항이다.
      • 따라서 가끔 텍스트 파서나 편집자를 혼란스럽게 한다.

유니코드 식별 방법

어떻게 우리는 바이트의 길이가 항상 일정한게 아닌데 인코딩을 알 수가 있을까에 대한 대답은 각 바이트별로 규칙이 존재한다.

1바이트 일때는 시작비트가 0이고,

2바이트일때는 110/10

3바이트일때는 1110/10/10

4바이트일때는 11110/10/10/10 이런방식으로 인코딩 되기 때문

UTF인코딩 기호보기

UTF-8 Encoding: 0xEF 0xBF 0xBF
UTF-16 Encoding: 0xFFFF
UTF-32 Encoding: 0x0000FFFF

예시

한글에서는 많은 사람들이 \을 돈(원)모양으로 사용을 해서 살짝 다르다.

\ (in Times New Roman) vs. (in Malgun Gothic)

이것은 두개의 폰트차이 때문에 생긴 현상이다.

BCD 바이너리 인코딩

10진수 숫자를 바이너리로 인코딩 하는것.(Binary-coded Decimal)

BCD방식에서는 각 자리별로 숫자를 메긴다.

한 자리당 4비트를 제공한다.

e.g. 3 2 9 → 0011 0010 1001

이런 방식을 쓰는장점

  • BCD는 십진수를 표기하는 방법이 자연스럽다.
  • 소수점을 (분수 등) 을 정확하게 표현할 수가 있다
  • 니블(4비트)를 사용해서 소수점 한 자릿수를 나타낼 수 있다. (추가 코드 6개를 쓰지 않는다는 장점)
    • e.g. 0.7 vs. 0.1011001…(2) vs. 0000.0111(SBCD)
  • 10의 거듭제곱 반올림을 쉽게 계산할 수 있다.
  • 3 2 9 → 0011 0010 1001

단점

  • 컴퓨터는 2진수 기반으로 작동하기 때문에 BCD를 사용하려면 다른 알고리즘을 적용해야 사용이 가능하다.(순수 이진수를 위한 ALU만으로는 사용불가)
  • 순수 2진수보다 더 많은 비트 필요.

계산기 디지털시계 같은 간단한 전자기기에 사용이 된다.

Gray Code

인접한 두 값이 한 비트만 다른 2진수 시스템이다.

  • 각 자리가 증가할 때마다 비트가 하나만 바뀐다는 특징이 존재한다.

이건 디지털 통신의 오류를 수정해줬고

스위치나 인코더에 사용된다

별명 : Reflected binary code (RBC), reflected binary (RB)

왜 Gray code가 노이즈랑 에러에 강한가?

0과 1은 늘 100퍼센트지만

0 → 0: 0 (100%) – 0 → 1: 1 (90%), 0 (10%) – 1 → 0: 0 (90%), 1 (10%) – 1 → 1: 1 (100%)

스위치에서 이렇게 정확하지 않다.

따라서 일반 아스키를 사용하면 비트를 여러개를 동시에 바꿔야 하는 경우가 계속해서 생기는데, Gray code에서는 오로지 1개만 바꾸기 때문에 에러 가능성이 더 줄어든다.

하지만 컴퓨터에서는 자주 사용되지는 않고 로보틱스쪽에서 많이 사용된다.

 

Parity Bit

  • 가장 간단한 방식의 에러 감지 코드형식이다.
  • 7비트로 데이터를 표현하고 1비트로 데이터가 에러인지 아닌지를 감지한다.

패리티 비트는 1의 총 수가 짝수 또는 홀수인지 확인합니다.

  • 짝수(even) 패리티 비트: 1의 개수(패리티 비트 포함)가 짝수이면 수정한다.
  • 홀수(odd) 패리티 비트: 1의 개수(패리티 비트 포함)가 홀수이면 수정한다.

한계

  • 패리티는 1비트 오류만 감지할 수 있다(2비트 이상 오류는 감지 불가)
  • 패리티는 1비트 오류가 어디서 발생했는지 위치를 알 수가 없다.

사용되는 곳

RAID(하드디스크 드라이버를 여러개로 나누는 기술)배열 같은 느낌이다.

이건 드라이브의 장애를 쉽게 해결 할 수 있다.

4테라의 하드디스크가 있다면 1개는 Parity Disk로 작동한다.

나의 데이터가 뭔가 문제가 있는지를 파악하는데 도움이 된다.

이게 없다면 하드디스크에 장애가 생겨도 모른다?

즉 복구가 쉽다. 무엇이 고장났는지 쉽게 알 수가 있다.

 

RAM 패티티를 사용하면 추가 정보로 데이터 오류를 감지할 수 있다.

이 개념은 ECC메모리 (오류 수정코드 메모리, 해밍코드)로 계승된다.

체크 섬

체크섬을 오류를 감지하는 작은 크기의 블록이다. ( 패이티 블록과 다르다.)

체크섬을 매우 복잡한 알고리즘을 사용한다.

Hash functions • Cyclic redundancy checks (e.g. CRC-32) • Message-Digest algorithms (e.g. MD5) • Secure Hash Algorithm 2 (e.g. SHA-256, SHA-512)

체크섬의 특징은 아주 작은 변화만 있어도 큰 숫자값의 변화가 생긴다는 것이다.

해쉬함수는 해쉬태이블의 인덱스를 사용하는 알고리즘이다.

체크섬은 체크섬 알고리즘에 의해 생성된다.

 

Bom을 지원하지 않는 에디터에서는 Bom을 문자를 이상하게 나타낼 수도 있다.

(Bom은 엔디안 정보를 줌.)

 


Uploaded by

N2T
728x90