도영스 공간

chapter 20 아스키 코드와 문자의 변환 본문

CS/CS 스터디

chapter 20 아스키 코드와 문자의 변환

dogdogdodo 2022. 4. 12. 00:59
반응형

디지털 컴퓨터의 메모리에는 비트만 저장할 수 있습니다.
그래서 컴퓨터를 이용하는 모든 작업의 형태는 비트의 형태로 구성되어 있어야 합니다.

이 장에서는 문자를 비트 형태로 표현하는 방식에 대해 알려줍니다.
대부분 정보들은 문자의 형태를 사용합니다. 문자를 디지털 형태로 나타내기 위해서는 각 글자를
특정 부호를 이용하여 표현할 수 있게 만들어야됩니다.
숫자, 문장 부호, 글자 등 글에서 나타나는 요소들 모두 표현 체계에 포함 되어야 합니다.

이러한 표현 체계를 부호화된 문자 체계라 부르며 사용되는 부호는 문자 코드라고 합니다.


질문 1. (이러한 작업에서 가장 처음으로 가져야 하는 질문은)
몇비트를 사용할 것인가? 입니다.

차근차근 생각해보자면,
- 문서의 폭은 신경쓰지 않는다. (=문서를 종이 위에 2차원 칼럼 형태로 인쇄된 문자들의 집합으로 인식하지 않는다.)
- 활자체가 다른 것을 신경쓰지 않는다.
- 앞장에서 나온 모스부호와 점자를 이진 부호로 만드는 방법과 동일하다.
(ex : 모스부호 : 가변폭 부호방식 =>자주 사용되는 문자 짧은 부호, 자주 사용 x 더 긴 부호
/ 점자 : 고정폭 부호방식 => 모든 문자가 6비트로 표현 / 탈출 부호로 대문자 표현 가능)
-(몇몇 부호는) 문자부호(로), 구두점 기호, 숫자를 표현하는 부호가 필요하다.

이제 여기에서 하나의 예시가 나옵니다.

I have 27 sisters.
=> 공백 포함 18개의 문자 : 연속된 문자 부호들을 문자열이라고 부릅니다.
'27'과 같은 숫자는 이진수로 사용되기에 적합하지 않으며 영어로 쓰인 다른 문장과 동일하게 다루어져야 됩니다.
즉, 실제 숫자의 값과는 전혀 관련이 없는 문자 부호가 필요하게 되는 것 입니다.

이러한 목적에 알맞는 부호는 5비트 부호 체계입니다. (에밀보도가 개발함, 1887년에 채택)
이 부호체계는 도널드 머레이에 의해 적절히 변형되고 현재는 (국제전기통신연합=) 국제전신전화자문위원회에 의해 1931년에 표준으로 채택되었습니다.
국제 전신문자 체계2번 (=보도부호, 머레이 부호)

20세기
보도부호는 전신 타자기에 사용되었습니다. (30개의 키와 스페이스만 있다는 점을 제외하면 키보드가 타자기와 비슷한 형태입니다.)
이것의 키는 키에 해당하는 이진 부호를 만들어서 출력 단자한비트씩 전송하도록 만들어진 스위치 입니다.
(인쇄도 가능)
다음 표는 보도부호 문자에 해당하는 32개 부호입니다.

32개 부호

간단히 설명드리자면, 부호의 범위는 00h~1fh까지입니다.
00h : 어떤 값도 할당되어있지 않습니다.
04h : 공백 부호
02h : 캐리지 리턴
08h : 줄바꿈
1bh: 기호 변경 => 숫자와 구두점을 위해 있는 것입니다.

다음 표는 숫자와 구두점에 해당하는 부호표입니다.

ITU에 의해 승인된 부호에는 05h 08h 16h는 정의하지 않으며, 국가별로 특정한 용도에 이용할 수 있도록 남겨 두었습니다.
벨 부호는 전신타자기에서 들을 수 있는 종소리가 나도록 만들어 주는 부호이며,
너는 누구니라는 부호는 어떤 전신타자기를 사용하고 있는지 나타내는 메커니즘을 활성화시키는 동작을 수행합니다.

허나 해당 부호 중 시프트 부호를 사용할 때에는 꽤나 지저분한 결과가 발생하여 대소문자를 구분할 수 있는 더 좋은 문자 인코딩 시스템이 필요하다고 합니다.

소문자 대문자를 표현하는데 52개의 부호가 더 필요하고 숫자 0~9까지 표현하기 위해 10개의 부호가 필요합니다.
62개의 부호가 필요한 셈입니다.
이 말은 최소 6비트 이상 사용되어야 된다는 말입니다.

결론은 7비트 부호를 사용하는 것입니다.

컴퓨터에서 통일된 부호를 모두 같이 사용하는 방법으로 다른 기기와의 호환성을 좀 더 높일 수 있고, 문자로 표현된 정보를 쉽게 교환할 수 있다고 합니다.

알파벳 문자들에 대한 부호가 순서있게 할당된 표준 부호를 아스키 부호라고 합니다. (ASCII)

컴퓨터로 문자를 다루고 있다면 아스키 부호가 사용되고 있다고 생각해면 됩니다.

아스키 부호는 7비트 부호입니다.
이진수 : 0000000 ~ 1111111
16진수:00h~7fh

16진수 부호와 각 부호에 대응하는 문자를 보여주는 표는 466페이지에서 467페이지에 나와있습니다.

이 표에서 기억해야될 것은
20h는 단어나 문장을 나누는 데 사용되는 공백이라는 것과
@가 있고 소문자가 있다는 것
7fh에 해당하는 마지막 기호가 빠져있다는 것입니다.

책에 나와있는 표를 살펴보면 7개의 비트로 128개의 부호를 만들 수 있습니다.
이 말은 33개의 부호를 더 할당할 수 있다는 뜻입니다.
(=> 조 금 더 뒤 자 세 하 게 나 오 는 내 용)

문자열
Hello, you!
16진수 아스키 부호
48 65 6C 6C 6F 2C 20 79 6F 75 21
위의 예시는 문자와 마찬가지로 쉼표, 공백,마침표를 위한 부호들이 존재하는 것을 알 수 있습니다.

아스키 부호에서 대문자는 소문자와 20h 차이가 납니다.
해당 부분을 명령으로 바꾸면,

ANI A,DFh

입니다.

 

ANI 명령은 즉치값으로 AND연산을 취하는 명령입니다. 이 연산으로 가장 왼쪽에서 세번째 비트만 0으로 변경함으로 아스키 부호에서 소문자를 대문자로 바꾸는 효과를 낼 수 있는 것입니다.

 

466페이지에서 467페이지에 나와있는 95개의 문자는 눈에 보이는 형태이므로 그래픽 문자라고 부릅니다. 

아스키 부호는 33개의 제어문자를 포함하고 있는데, 이것은 눈에는 보이지 않지만 다양한 기능을 수행한다고 합니다.

 

33개의 제어문자 표는 470페이지에 나와있습니다.

제어문자를 사용하는 아이디어는 제어문자를 그래픽 문자 중간에 끼워 넣어서 문서의 기본적인 형태를 구성할 수 있도록 하는 것입니다.

 

09h : 수평탭 부호 => 한페이지에서 문자의 모든 수평 위치가 0이라면 이 수평탭은 인쇄될 문자가 8배수가 되는 수평 위치에서 인쇄되도록 만들어 준다고 합니다. (ex =>  a       b       c)

 

이 제어 문자 중에서 가장 중요한 것은 캐리지 리턴(0D)과 줄바꿈(0A) 부호입니다. 

프린터에서 캐리지 리턴은 프린터의 인쇄 헤드를 페이지 왼쪽으로 보내는 역할을 수행

줄바꿈 부호는 프린터의 인쇄 헤드를 그 다음 줄로 넘기는 동작을 수행하게 만듭니다.

새로운 줄에서 시작할 때 두 부호가 필요합니다.

 

아스키 코드가 컴퓨터 세계에서 가장 많이 사용되고 있지만, IBM대형 컴퓨터들은 천공카드에서 유래된 6비트인 BCDIC에서부터 확장된 8비트 EBCDIC부호를 사용합니다.

 

473페이지 위에 있는 그림이 천공카드입니다.

 

IBM 천공카드에서 사용하는 용어

0~9번: 숫자행 or 숫자 천공

11~12번: 영역행 or 영역 천공

(여기에서 혼란스러운 부분 => 0~9번 숫자행이 아닌 영역행으로 사용될 때도 있음.)

 

 8비트 EBCDIC부호는 상위니블(4비트 값) 하위니블로 구성 되어있습니다.

상위니블 에는: 문자의 영역 천공에 해당하는 내용을 임의의 방법으로 대응시킨 값이 있습니다.

하위니블에는 : 문자를 나타내기 위한 숫자 천공에 해당하는 BCD부호가 있습니다.

 

474(대문자)~475페이지(소문자) 나온 표가 EBCDIC부호 표 입니다.

해당 표에서 기억해야될 것은 각 문자에 부호를 할당할 때 중간 중간 할당되지 않은 영역(J 부분 )이 있다는 것입니다. => 이것은 골치 아픈문제를 야기한다고함.

또, 소문자와 대문자의 숫자 천공은 동일하지만 영역 천공 부분이 다르다는 것입니다.

 

이 EBCDIC 부호의 경우 12비트 정보를 저장하기에 충분해 보이며,

천공카드를 이용해서 아스키 부호를 표현하려면 12개의 위치들 중 7개에만 구멍을 내면 된다고 합니다.

 

허나 8비트 부호들 중 많은 부분이 정의되지 않은 상태이므로 7비트를 사용하는 아스키 부호가 좀 더 합리적인 사용 방법일 것 같다고 합니다.

 

그렇지만, 컴퓨터가 7비트 아키텍처를 사용하기보다는 8비트 아키텍처를 사용하기 때문에 아스키 부호가 기술적으로는 7비트 부호이지만 대부분 8비트 값으로 저장된다고 합니다.

 

아스키 부호가 컴퓨터 산업에서 가장 중요한 표준인 것은 사실이지만 완벽하지는 않습니다.

이것의 가장 큰 문제점은 미국 실저에만 너무 맞추어져 있다는 것입니다. 비영어권 문자에 대해서는 많은 고려가 이루어지지 않았습니다. 

 

이러한 문제로 수십 년에 걸쳐 수많은 아스키 부호 확장안이 발표되었습니다.

- ASCII 표준은 일본어, 한국어나 표의 문자를 사용하는 중국어를 좀 더 근본적으로 지원하기 위해 더 많이 확장되었습니다.

- 시프트 -JIS 라는 문자 인코딩 방식은 1바이트 문자가 아닌 2바이트 문자 부호로 약 6000개의 문자를 추가로 사용할 수 있도록 만들었습니다.

 

이 처럼 전세계의 언어를 모두 표현하기에 적합하고 모호하지 않은 명확한 표준이 있다면 좀 더 개발에 편리할 것이라는 공감대로

1988년 유니코드의 개발이 착수 되었습니다. 

 

아스키코드는 7비트의 부호인 반면, 유니코드는 16비트의 부호입니다.

즉 유니코드 각각의 문자를 표현하려면 2바이트가 필요하다는 소리입니다.

유니코드는 65,536자를 표현할 수 있고, 이것은 세계 모든 언어를 수용하기에 충분하다는 의미입니다.

 

유니코드가 기존에 존재하는 문자 코드에 비해서 많이 향상되었지만, 아직까지 완전히 보급된 상태는 아니라고 합니다. 

아스키 확장 부호들을 완전히 없애고 유니코드로 전환하는 데에는 시간이 좀 필요하다고 합니다.

 

유니코드의 한가지 실질적인 문제점은 하나의 문제를 저장하는 데 1바이트가 아니라 2바이트가 필요하다는 점입니다.

문자 인코딩 체계에서 모호성을 없앨 수 있다면 이정도의 비용은 충분히 지불할만한 가치가 있다고 합니다.

 

이렇게 20챕터가 끝이 납니다!!

 

 

 

아스키 코드

728x90
반응형

'CS > CS 스터디' 카테고리의 다른 글

chapter13 그렇다면 뺄셈은 어떨까요 ?  (11) 2022.03.26
CODE 책 스터디 3일차 정리  (0) 2022.03.17
Comments