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

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

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

신비로 JAVA월드 의 Soony(fstars@shinbiro.com) 님의 강좌글 펌

http://club4.shinbiro.com/clb/bbs/sbrClbBbs_View.jsp?bbsid=50354&pg=2&dbsts=A&artno=426


[들어가며]

오호.. 하루에 2개나 올리다니 너무 열정적인 강의 아닌가..>_<

필자도 바쁠땐 바쁘다.. 오해 마시길.. 오후에 잠깐 업무가 밀려서 정신이 없었다..

이 정신 없는 마음으로 그럼 3강도 시작해보자..^^

 

[주의]

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

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

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

 

[4. 문자?, 문자셋?, 인코딩?, 폰트?]
틀렸다.. 원래부터 계획을 세우고 진행한 강의도 아니고 즉흥적으로 쓰다보니 강의의 순서가

틀려져 버렸다. 초보를 위해 글을 쓴다고 하고선 "문자셋" 이나 "인코딩" 의 명확한 뜻도

전달하지 않고 강의 내용에 등장했으니 얼마나 이해가 어려우셨으랴.. -_-;

 

그렇다고 서적에 있는 사전적 정의를 쓰겠다는 것은 아니다.. 그러나 개념은 잡고 가야하지

않겠는가? (잡을건 잡고 가자.. 갈길이 멀어도 할건 해야하는 거다 -_-)

 

-- 문자?

문자를 모르시는 분이야 있겠냐만은 이분야에서 중요한것은 우리가 생각하는 문자는

Case-Sensitive (대소문자 구별 즉, 대문자 A와 소문자 a 는 다름) 하다는 거다.

전 강의에서도 이야기했지만 표현할 때 구별이 되어야 한다면 A 와 a 는 다른 것이고

그래서 영어 문자는 26개가 아니고 52개라 했다. 이러한 현상은 대부분의 라틴계 알파벳을

사용하는 언어권에 다 포함되며 일본어도 그러하다. (히라가나 와 가타가나 문제가 아니고

같은 "あ" 라 하여도 작은거와 큰게 있다. 당연히 구별한다.)

 

-- 문자셋?

하나의 언어권에서 사용하는 언어를 표현하기 위한 모든 문자의 모임을 문자셋(Character Set 또는 Charset) 이라한다. 영어는 일단 대소문자 통틀어 56개를 일렬로 모으면 영어 문자셋이 된다. 물론 ASCII Code에서는 이외에도 부호와 공백 등과 같은 특수 문자를 더 추가하여 ASCII Character Set 으로 확정했지만 어찌되었든 주된 내용은 표현 가능 문자들의 모임이다.
그렇다면 우리의 자랑스런 한글 문자셋은 어떻게 모으면 될까?

자음 14 + 5(5는 뭐냐고? ㄲㄸㅃㅆㅉ  ^^ , ㄱ 2번 연타한다고 ㄲ 되는거 아님을 안다면 이의제기 하지말고 필자를 믿어주자) 로 19개, 모음은 10 + ㅐㅒㅔㅖㅘㅙㅚㅝㅞㅟㅢ 로 21개 ... 더 있나..?

우리나라는 대소문자가 있는것도 아니고 (한글도 작은게 있다고? 그건 소문자가 아니고 글자 폰트 크기가 작은거다. 부디 혼동하지 말자-_-) 이정도면 골라쓰겠지? 대충잡아 우리도 40개정도면 한글 문자셋이라 할 수 있겠네...?

ㅡ.,ㅡ 안타깝게도 틀렸다.. 문자셋은 하나의 글자로서 준비된 문자의 모임이어야 한다. "가" 를

표현하기 위해 키보드로는 "ㄱ +ㅏ"를 순서대로 입력하지만 우리 한글은 영어처럼 순서대로 한글자씩 불러오면 되는게 아니기 때문이다. 키보드로 "ㄱ+ㅏ" 를 순서대로 입력하면 1글자폭의 준비된 "가" 라는 글자로 표현되어야 하며 그러기 위해서 문자셋에 "가" 라는 모양이 들어있어야 하는것이다. 그럼 우리 한글 문자셋의 문자는 총 몇개나 될까 ?

"가" 부터 시작하여 "각" 을 거쳐 "꾹꾼꾿꿀꿈" 등등을 지나 주루룩 ~ "힣" 까지 준비되어야 한다.

여기다 한글 언어권은 한글만 사용하는게 아니고 한자도 사용한다. 그러므로 한글언어권의 사용한자도 몇만개 준비해서 넣어두자.. 어이구야.. 이게 몇개여? ㅡ_ㅡ;

 

그래서 동아시아 (한자때문에라도) 언어권의 문자셋은 글자수가 많다..(참 많다.. 몇만개씩 한다.)

 

-- 인코딩?

인코딩이란 문자셋과 바이트 순서와의 매칭 방법이다. 예를 들어보자.. 1강의 에서 ASCII Code 의 테이블이 나와있는 주소를 링크시킨적이 있다. 이때 ABCDE...  이런것들의 모임은 문자셋이고 A는 65번 B는 66번 이렇게 바이트 순서와 매칭시킨 방법을 인코딩이라 한다.

(인코딩 ... 요새 많이 들어보는 단어 아닌가? 어디서 들어봤지? 아~~ 동영상..~ 

그렇다.. 동영상 파일들을 제작할때도 인코딩이라는 말을 사용한다. Wave 파일에서 Mp3로 변환하는 작업도 인코딩이라 한다. 인코딩의 사전적 의미는 문장을 암호화 한다거나 기호화 하는것을 의미한다. 동영상 인코딩은 아날로그 영상신호를 디지털 바이트 흐름으로 기호화 하는것을 의미하며 우리의 인코딩은 글자를 바이트 흐름으로 기호화 하는것이다.)

 

따라서 ASCII 는 인코딩 방법의 한 종류일 뿐이다. ABCDEF...   요 같은 문자셋을 가지고 필자가

A는 100번 B는 101번 ... 이렇게 순서를 정해서 "SOONY-2004-1/FUHEHE" 라는 규칙을 만들수도 있는것이다. 그러면 새로운 인코딩이 되는 것이다. 다만 아무도 알아주지 않아서 그렇지-_-;

(아무도 알아주지 않는다는 것은 위에서는 -_- 이거 하나로 넘어갔지만 사실 문제가 심각한거다

인코딩 규칙이 남과 호환되지 않는다면 전달하려는 내용이 달라진다고 2번째 강의에서 설명한바 있다. 따라서 국제 표준을 따르는 것이다.)

 

-- 폰트?

필자는 디자이너가 아니다. -_-; 폰트에 관한 해박한 지식이 있는것도 아니지만 어찌되었든 폰트에 대해서 우리와 연결된 내용을 설명하면 폰트는 인코딩에 의존한다는 것이다.

컴퓨터는 00100001 이라는 바이트를 만나면 ASCII Code 인코딩 테이블에 대조하여 대문자 A라고 판별하며 동시에 Arial 폰트에서 Code 65번째에 해당하는 그림을 가져오는데 그 그림이 A 라는 모양의 그림이 되는것이다. 위에도 설명했지만 "SOONY-2004-1/FUHEHE" 인코딩은 기존 ASCII 인코딩과 차별된 인코딩으로서 이 기법으로 A를 입력하면  00110010  이렇게  변환되는데

이 인코딩을 지원하는 폰트가 없이 일반 ASCII 순서에 맞춘 폰트를 사용하면 컴퓨터가 Code 100번째 에 해당하는 그림을 가져와서 뿌리니 ... "d"    윽.. -_-;  

이러므로 글자그림 즉, 폰트를 만들때는 인코딩의 순서를 지켜주어야 하는것이다. 당연히 각각의 폰트는 자신이 순서를 맞춘 인코딩을 가지고 있으며 기준 인코딩이 아닌 다른 인코딩상에서 그 폰트를 억지로 로드하면 이른바 "깨지는" 글자 또는 소시적부터 게임 조금 하신다 하셨던 분들이 예전에 일본어로 된 게임들 한글 인코딩 상에서 돌릴때 즐겨보시던 "꿇뎰닳뺣"  뭐 .. 이런식으로

의미전달 기능을 완전히 잃어버리게 되는것이다.

그러므로 폰트 또한 인코딩을 탄다라는 것을 기억해두자..

 

(여담이지만 필자는 지금 웹 개발을 하고 있는데 언젠가 일본어로 된 홈페이지를 개발할 필요가 있었다.. 그런데 디자이너가 스타일 시트를 작성해 왔는데 모든 폰트 패밀리가 버젓이 "굴림", "돋움" 이었다는 -_-;  외국어에 대응되는 개발에 종사하시는 분들은 자신이 대응해야할 언어의 인코딩과 폰트 정도는 알아두자.. 주로 일본과 중국이 문제가 될텐데..

일본어는 MS_Gothic 또는 MS_Mincho 폰트를 사용해야 바로 보이며, 중국은 SimSun 또는 PSimsun 폰트가 각각의 인코딩에 맞춰진 폰트이다.)

 

[마침]

역쉬 주절이 주절이 늘어놓으니 이번 강의는 인코딩 역사 진도는 한걸음도 못나갔다. -_-;

그래도 개념을 잡는데에는 조금이나마 도움이 되었으면 한다. 혹시나 아직도 이해가 안간다면

필자의 무능함을 원망하라. 글재주가 이게 한계인듯하다.

728x90
반응형