아스키 코드란?

MJ·2022년 7월 4일
0

[개발용어]

목록 보기
5/11
post-thumbnail

1. 아스키 코드

미국에서 정의하고 있는 표준, 영문 알파벳을 사용하는 대표적인 인코딩방식중 하나
초창기 문자 인코딩이며, 대부분의 문자 인코딩 방식도 아스키코드표를 기반으로 파생되었습니다.

아스키코드는 7BIT 인코딩으로 총 1BYTE(8BIT)에서 7bit를 사용하여 128개의
문자를 표현할 수 있습니다. (0~127)

나머지 1bit는 에러 검출을 위한 Parity bit로 비워두어 총 1byte로 문자를 표현 합니다.
7bit중 1에 해당하는 개수가 홀수면 1, 짝수면 0으로 설정된 Parity bit를 전송 합니다.


1.1 Parity bit란?

  1. 패리티비트는 바이너리 데이터에서 1bit 오류를 검출하는 코드 방식 입니다.

  2. 패리티비트는 홀수(odd, 기수)와 짝수방식(even, 우수)이 있습니다.

    예를 들면 120이라는 값을 8bit의 공간에 저장을 했다고 합시다.
    120이라는 값은 컴퓨터에게 전달될 떄 2진수로 변경되어 기억장치의 특정 주소 위치에 저장 됩니다.

120이라는 값은 2진수로 1111000 입니다. 데이터를 컴퓨터 기억장치에 저장할 때
01111000 으로 저장될 것입니다. 이때 좌측에 1BIT가 남게 되는데, 1BIT를 0으로 채웁니다.

만약 지금 데이터 값에서, 120의 2진수 값 첫 번쨰 자리인 1이 0으로 변경 된다면
00111000이라는 값이 되어 값을 읽어올 때 56이라는 값으로 들어있을 것 입니다.
또는 데이터가 손상되어 읽어올 수도 없을 수 있습니다.

그리고 제일 중요한 것은 소실된 데이터가 1인지, 0인지 유추할 수가 없습니다.

1.2 패리티비트 적용

이전과 같이 120이라는 2진수 값에서, 맨 앞에 비어있는 비트를 맨 뒤로 옮긴 후 패리티비트라고 정의 합니다.

현재 데이터는 1111000 0이므로 (패리티비트제외) 1+1+1+1+0+0+0으로 짝수 입니다.
그러므로 패리티비트는 0이 됩니다.

간단하게 설명하면, 데이터의 값이 짝수면 패리티비트는 0, 홀수면 패리티비트는 1입니다.
그리고, 홀수인 데이터 값도 패리티비트가 1로 채워지기 때문에 1의 개수는 결과적으로 짝수가 됩니다.

그렇다면 지금 데이터 값 에서 첫 번째 1의 값이 오류로인해 없어진다면 어떻게 될까요?

맨 앞에 1이 사라져서 x1110000이 된다고 해도, 맨 앞이 0인지 1인지 패리티비트를 보고 확인할 수 있습니다. 데이터 값을 확인 해보니, 맨 앞의 자리가 오류로 인해 확인할 수 없습니다.
하지만 패리티비트가 짝수이고 전달된 데이터 값이 1+1+1인 홀수라서 오류로 사라진 데이터 값이 1인것을 유추할 수 있습니다.


만약 데이터가 1110000 0 1+1+1+0+0+0+0 홀수 였다면, 패리티비트 또한 홀수가 되어
결과적으로는 1110001로 짝수가 됩니다.

패리티비트 자체는 홀수 패리티비트 입니다


2. 확장 아스키 코드

컴퓨터와 인터넷이 보급화되어 일반 아스키코드만으로는 문자를 표현하기에 부족함이 생겼습니다.
영어권뿐만 아니라, 다른 나라에서도 문자열 셋을 사용해야 하므로 기존의 아스키코드 7bit(0-127)가 아닌 8bit를 아스키코드를 표현하는데 사용하여 총 256개의 문자를 표현할 수 있습니다

일반 아스키 코드(0~127) + 확장 아스키 코드(128~255) = 총 256개


3. 멀티바이트 인코딩

처음 멀티바이트 인코이 사용된 것은 CJK(Chinese-Japanese-Korean) 멀티바이트 인코딩으로
한국, 중국, 일본어는 문자의 수가 매우 많기 때문에 확장 아스키코드로도 부족함이 있었습니다.
이로 인해서1byte(8bit)가 아닌 여러 byte를 통해 문자를 표현한 것이 멀티바이트인코딩 입니다.

한국은 여러 인코딩 방식을 거쳐 왔습니다.

  • 한글의 자음과 모음을 조합해 표현할 수 있는 조합형 한글 인코딩
  • 자음과 모음을 합쳐서 완성된 문자로 표현하는 완성형 한글 인코딩

조합형 인코딩에서는 2byte 조합, 3byte 조합등등 여러 방식을 사용했고
완성형 인코딩에서는 EUC-KR2350자 CP94911172자를 사용하게 되었습니다.

많은 인코딩 방식에서 서로 다른 인코딩 방식을 사용하다보니 프로그램이나 문서 사이에서
정상적으로 인코딩 되지 않는 호환성에 문제가 발생하긴 했다.

profile
프론트엔드 개발자가 되기 위한 학습 과정을 정리하는 블로그

0개의 댓글