IT

[스크랩] [강좌] 심심할때 읽어보는 문자셋, 인코딩 이야기 -2-

네모세모네모 2009. 4. 17. 11:14
2. 문자 1개는 1Byte~

이전글의 기억을 조금 상기시켜보자. 이진 Bit 흐름 밖에 알아먹지 못하는 컴퓨터에게 문자를
다루도록 하기 위해서 미국넘들은 ASCII Code 라는걸 기준으로 채택하였으며 이 코드표에는
총 128가지의 약속이 있어서 이를 표현하려면 7비트의 경우의 수가 필요하다고 했다.
그런데 사실 7비트는 맘에 안들기는 하다. 나누고 붙이고를 좋아하는 비트 연산의 입장에서는
짝수가 맘에 들었나보다. 그래서 우리는 1Byte = 8Bit 라고 알고 있는것처럼 기본 단위는 
8비트이니 7비트의 ASCII 코드를 8비트에서도 판독이 가능하도록 조정하고 이후 모든 컴퓨터
에서는 1바이트 단위로(즉, 한번에 8Bit씩) 읽어들이게 하면 읽어들인 1바이트마다 1개의 문자를
표현할 수 있게 되는것이다. 
그럼 조정은 어떻게 하느냐..
예를 들면
0100001     --> 'A'         (자릿수 하나당 비트 하나씩 즉, 7비트이며 현재 십진수로는 65를 
                                  나타내고 이는 ASCII Code 에서는 대문자 A를 나타낸다)
이 7비트의 앞에 0값의 비트 하나를 더 추가한다.
00100001   --> 'A'        (자릿수가 하나늘어난 8비트가 되었다. 그러나 앞에 붙은게 겨우 0 이므로
                               십진수로 변환하면 여전히 65의 값을 가진다. 그러므로 대문자 A를 나타낸다.)
이해가 될려나..-_-; 즉, 7비트 오리지날 ASCII 로 작성된 글을 한문자씩(7비트씩) 읽어서 그
읽은것에 0인 Bit 하나를 추가하면 8비트 단위의 ASCII 로 변환이 가능한것이다. 
(사실 이거 별 필요는 없다. 요새 7비트 인코딩 전송은 특별한 경우가 아니면 사용하지 않기 때문이다.
요즘엔 한 문자는 1Byte, 즉 8Bit 라고 널리 인정되고 있기 때문이다.)
3. 문자, 서유럽으로 확장되다

ASCII Code는 미국넘들이 자국 내에서의 정보 통신을 위해 만든것이다. 당연히 지들 쓸것만 집어넣은 것이니 
미국넘들에게는 필요없는 움라우트찍은 O (즉, 이거 "Ö") 라든지 것들은 ASCII Codeset 128가지 문자에는 없는것이다. 
아무리 영어가 세계어라지만 독일이나 기타 유럽어를 사용하는 나라 애덜이 기왕이면 자기나라의 문자도 표현되었으면 좋겠다고 
생각할 것은 당연한 일...
컴퓨터가 미국에서만 쓸거라면 상관없지만 어디 그러한가.. 이제 세계는 바야흐로 컴퓨터 세상인것을.. -_-; 
그러나 전 강좌에서도 이야기 했지만 128가지는 이미 7Bit의 경우의 수를 다채운 것이다. 
만약 이보다 더 문자를 넣고 싶다면 Bit가 늘어나야한다. 
다행히 기본 단위는 7비트가 아니고 8비트 이므로 맨 앞 1비트가 비어있다. 
7비트는 128가지, 그러나 8비트는 2의 8제곱이므로 256가지
즉, 비트 하나가 더 추가 됨으로서 나머지 뒤쪽 128가지의 경우를 더 적용할 수 있는 여유가 생긴것이다.
여기서 한가지 집고 넘어갈것은 그렇게 가능하면 Bit수를 줄이려고 노력하던 예전 하드웨어 시절에는 움라우트 글자나 몇 개
집어넣을거면 ASCII Code 에서 부호몇개 움라우트 글자로 대체해서 128가지를 새롭게 자기들 방식으로 맞추면 되는거 아니냐
하시는 분들은 "호환성" 이라는 글자를 가슴에 집어넣어주자.. -_-;
그렇다.. 호환성이다.. 위의 가정대로 만약 독일이 자기 나름대로의 새로운 글자조합 128가지를 만들었다면 이는 독일에서만
사용되어야 하지 미국넘이 ASCII Code 로 작성해서 보낸 문서는 오류가 나타나게 된다. 
즉, ASCII Code 에서는 33번째 문자에 "!"를 할당하였는데 독일 넘들은 우린 느낌표안써! -_-;
라며 대신 거기다 움라우트 A 를 집어넣으면 어떻게 될까.
미국넘이 본문에 "A!" 라는 2글자를 전자메일로 독일에 보냈다.
A! 라는 글자는 ASCII Code 테이블에 맞추어 00100001 00010001 요렇게 2개의 바이트로 변환되고 이것이 독일쪽으로 전송된다. 
받는쪽 독일 컴퓨터에도 00100001 00010001 라는 바이트는 변함이 없다.
그러나 여기서 독일쪽 컴퓨터는 이를 문자로 변환할때 ASCII Code를 사용하는게 아니고 
자체 코드를 사용하여 "AÅ" 이라고 표현해 버린다. 
이게 몬가.. 전달하려는 의미를 완전히 무시해 버린게 된것이다. -_-;
한술 더떠서 ASCII Code 와는 기본 알파벳 순서 마저 다르다면?
그래서 호환성이 필요한 것이다. 
미국 표준협회에서 관장하던 ASCII Code는 어느덧 하드웨어가 발달하고 컴퓨터를 사용하는 
지역이 전세계로 확장됨에 따라 ISO (국제 표준 협회) 라는 기관에서 표준 글자 코드를 관장하게 되었다. 
ISO는 기본 ASCII Code를 충분히 호환하면서 서유럽언어까지 사용 가능한 새로운 문자셋을 채택하니
이른바 ISO-8859-1/Latin1 이다.
Latin1 문자셋은 앞쪽 128 (즉, 0~127까지) 에는 기본 ASCII Code를 그대로 계승하여 호환을 
유지하고 뒤쪽 128 (즉, 128~255까지) 에 움라우트 붙은 글자들과 같은 서유럽 고유의 문자들을 배치하여 문자셋을 정의하였다. 
이제부터 문서 인코딩을 서유럽어(ISO-8859-1/Latin1)으로 세트하면 미국에서 작성한 문서나 
독일에서 작성한 문서나 가리지 않고 같은 내용을 표현할 수 있게 된것이다. 
세월은 흘러 1980년대 초 ....
동아시아에도 컴퓨터가 제법 보급되기 시작한다. 
그 당시에는 가장 발달 순서가 높았던 일본넘들이 일본어를 컴퓨터로 표현하고 싶어했다..
(아마 다음 강좌나 다다음 강좌에 표현하고 싶어 할것이다. -_-;)
출처 : Software information provider
글쓴이 : 권진호 원글보기
메모 :