본문 바로가기
공부하는 하스씨/안드로이드

[펌강좌] 문자셋, 인코딩 이야기 #1

by 박하스. 2010. 2. 23.
728x90
반응형

신비로 JAVA월드 의 Soony(fstars@shinbiro.com) 님의 강좌글 펌
http://club4.shinbiro.com/clb/bbs/sbrClbBbs_View.jsp?bbsid=50354&pg=2&artno=422


[들어가며]

퇴근 시간을 30분 남겨두고 어처구니 없게도 일을 다 마친바람에 여느 때처럼 웹서핑을 하다가

문득 글이 조금 쓰고 싶어졌는데 필자가 아는것은 별로 없는지라 마침 필자가 문자를 다루는

프로그램 회사에 다녔을때 배웠던 것을 혹시나 모르는 분들을 위해서 미숙하지만 이야기를

해볼까 한다.

 

[주의]

이 글은 정말 초보를 대상으로 작성된 글로써 필자는 이글에서 논의되는 내용의 좀더 심층적인

문제나 어투등을 문제 삼는 리플을 정중히 사양합니다. 단, 잘못된 점의 지적은 환영합니다.^^

표현의 원할함을 위해서 존칭은 생략했습니다.

 

[1. 멍청한 컴퓨터 문자에 눈을 뜨다]

1970년대 트랜지스터 컴퓨터를 넘어 IC 칩을 이용한 컴퓨터로 하드웨어가 발전하게 됨에 따라

당시로서는 더욱 다양한 전자기기의 정보의 교류가 필요하게된다. 그런데 실상은 알다싶이

컴퓨터는 0과 1밖에 모르는 바보였으니.. 한번 상상을 해보자.

컴퓨터가 문자를 알아먹고 문자로 표현할 줄 안다면?

데이터의 입력과 출력도 기존처럼 천공카드에 구멍뚫어서 0과 1을 표현하여 집어넣는거 보다

사람이 표현하기 쉬운 글로 입력하고 컴퓨터도 그걸 그대로 알아먹고 출력할 것이 있으면

사람이 알아보게 문자로 출력하는 ~

아~ 정말 당시로서는 꿈만 같은 이야기였다...

 

그래서 미국에서는 70년대 말 전자 정보에서의 문자에 관한 규격을 세우고 컴퓨터에게 문자를

가르치는 일을 맘먹기에 이른다..

 

그럼, 이제 컴퓨터에게 문자를 가르치는 과정을 간단히 설명해보자.

 

이를테면 이런거다.. 디지털, 디지털 요새 참 이 단어 많이 듣는데 컴퓨터가 알아먹는 디지털

신호는 이진수 즉, 0과 1 뿐이다. 할아버지 컴퓨터도 손주 컴퓨터도 지금 이시간 당신이 가지고

있는 컴퓨터도 모든 컴퓨터는 0과 1밖에 모른다. 아닌거 같다고?

근데 어쩌나 여러분이 늘상듣는 바이트, 비트등의 데이터 단위 그게 다 0과 1의 조합이다.

자꾸 아니라는 생각이 들어도 일단은 필자를 믿어주자.

 

자 중요한건 컴퓨터는 문자를 모른다!

0과 1의 조합 밖에는 아는게 없다. 그러나 사람은 모니터에 문자를 표현하고 싶다는 거다.

그럼 이제 이런 가정을 해보자

1개의 비트는 0과 1,   이 2가지를 표현할 수 있다.

이때 0은 'a', 1은 'b' 라고 정하자. (정하는 거다 - 일단 필자를 믿어주자)

사람이 키보드에서 a 라고 치면 중간에서 이를 정해진 기준표에서 조회해보고

아 이거 0이군..   해서 0으로 바꿔서 데이터를 저장한다.

b도 마찬가지..

 

그럼 01101  이라고 데이터가 들어가 있는 상태에서 만약 문자 1개당 1비트다 라고 정의되어

있고 지금 저 데이터를 모니터에 문자로 뿌려라 하면 컴퓨터는 있는 그대로 01101을

보여주는게 아니고 'abbab' 라고 문자로 보여주면 되는 것이다.

 

이게 컴퓨터에서 비트 데이터들을 문자와 매칭시켜서 표현하는 것으로 이런식으로 알파벳의

26개 문자를 어디서나 통일성 있게 순서를 두어 표준을 정하면 우리는 원하는대로 글자로

입력하여 데이터를 입력할 수 있고 출력도 할 수 있게 되는것이다.

 

여기서 중요한것은 무엇? "컴퓨터는 0과1의 조합밖에 아는게 없다는거다!!"

 

자, 근데 앞의 예제에서 보았듯이 1비트 가지고는 표현할 수 있는게 고작 2개다..

그러나 알파벳은 일단 문자가 26개, 거기다가 대문자는 안써먹나? 그래서 2배하니

52개, 음... 거기가다 간단한 부호도 쓰니 이것두 몇개 넣자 (이런거 말이다. " !$#%^ ") 

음.. 또 뭐있을까.. 아.. 이녀석 한칸띄우기나 줄 새로 시작하기 뭐 이런것두 모르겠다..

(누차 강조하지만 컴퓨터는 0과1의 조합인 바이트 흐름밖에 아는게 없으며 공백이란것두 어떤

특별한 조합에 대응시켜야 알아먹지 데이터가 끊겼다고 공백이 아니다. -_- 음.. 설명이 어렵군)

 

그래서 공백, 라인바꾸기, 한칸 지우기 등등의 특수문자도 몇개 넣어두자..

 

이렇게 저렇게 잡다하게 좀 집어넣었더니 어느덧 표현해야할 가지수가 128가지나 되었다.(많이도 넣었네..ㅡ_ㅡ)

 

일단 128가지를 표현해야하니 비트 묶음이 7개가 필요하다. (2의 7제곱 = 128)

즉, 7비트를 하나의 묶음으로 보고 0~127까지의 표현수중 어느것이냐만 따지면 일단 알파벳과

대충 기호들을 표현할 수 있겠다

 

이렇게 정의된것이 ASCII 이다..

ASCII 코드표는 여기서 확인이 가능하다.

http://www.asciitable.com/

 

하드웨어의 조건상 처리할 데이터 크기는 적으면 적을수록 좋은거다.

1개의 문자를 표현하는데 꼭 7비트가 필요하다면 거기까지 수용하는거고 굳이 8비트씩

다룰 이유가 없다. 따라서 ASCII 는 처음에는 7비트를 1문자씩 처리하였다.

 

[마침]

음.. 술을 먹은것도 아니고 너무 두서없이 쓴거 같다.. 뭔 시리즈처럼 1이라고 쓰긴 했는데

사실 2가 언제 나올지는 장담 못하겠다. 반응 않좋으면 안나올지도...ㅎㅎ
암튼 기회가 된다면 다음에는 Latin1 로 넘어가면서 8비트를 1개의 문자로 다루게 됨과 더불어

일본어를 비롯한 동아시아 문자셋 얘기를 해볼까 한다.

 


728x90
반응형