출처: http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=Lr8YeOa58cYoO4p5+YpULl1xLs6/yhl5&qb=x9Gx2yC+xr26xbDE2rXlx6UgyK7A5Q==&pid=fRU8twoi5UKssc/zViwsss--333712&sid=SUX8B6fyRUkAAH-zpnk


우리가 일반적으로 쓰고 있는 지금의 IBM 호환용 컴퓨터는 미국에서 발명되었기 때문에 영문자만을 표현하도록 고안되었다. 숫자 0~9까지 10개, 영문 대소문자를 합쳐서 32개, 그 외의 문장기호와 특수문자들을 모두 합치면 128개면 충분했고, 이러한 문자들을 터미널(Terminal:단말기)을 통해서 호스트컴퓨터로 입력시키기에 충분히 가능했다. 128이라는 10진수를 0부터 시작하는 16진수로 표현하면 7F이고, 전기적인 수치인 2진수로는 0111 1111이 128번째의 값(10진수로는 128)에 해당한다. 129번째 값부터 256번째 값(1111 1111)까지는 확장코드(Extended Code)를 가짐으로써 특별히 Box나 Line, 특수문자 코드를 가진다. 이렇게 8개의 자릿 수 1바이트(Byte)로 영어권에서 충분히 사용가능하며, 이것을 American Standard Code for Information Interchange(ASCII:아스키)라고 한다. 그러나 비영어권에서는 1byte로 모든 해당 국가의 문자를 사용할 수 없다. 특히 동양권 문자들일 경우는 더욱 그렇다. 그러나 개인용 컴퓨터는 결국 16비트로 진화되었고 8비트와는 달리 정보를 처리할 수 있는 영역이 있어 상당한 발전을 이루었고 8비트의 제한된 범위를 뛰어넘게 되어 지금은 각 국가별 코드페이지를 가지게 되었다. 이러한 코드 페이지를 연결하기 위해서는 기본 8비트 단위의 아스키를 기반으로 해서 상위 아스키(80~FF)와 하위 아스키(00~7F)를 구분하고 상위 아스키에 코드페이지를 연결 방식으로 해당 문자 코드를 연결해서 확장해서 사용하게 된다.


 0000 0000부터 0111 1111까지의 128개의 코드는 그대로 사용하지만 129번째 1000 0000부터는 확장코드로써 코드 페이지를 갖게 하는 것이다. 따라서 8비트 중에 최상위 Bit값 1을 기준으로 구분하게 된다. 1이면 국가별 코드페이지가 사용되는 경우에 해당해서 1바이트 코드가 아닌 2Byte(16bit 코드체계)로 동작하게 된다.


[DBCS (Double Byte Character Set) Codepages]

코드 페이지 참조: Windows Codepage 949(Korean)

http://www.microsoft.com/globaldev/reference/dbcs/949.mspx


 위에 페이지를 보고 2바이트 체계 한글의 경우를 생각해 보자, 16진수로 8141이라는 코드가 있을 때 영어문자로 받아들여 1byte처리가 된다면 ü,A가 될 것이다. 이때는 0081, 0041로 코드를 받아서 처리가 되기 때문이다. 2byte로 묶어 처리되면 8141코드는 갂(HANGUL SYLLABLE KIYEOK A SSANGKIYEOK)을 나타내게 된다.


 흔히 한글이 응용어플리케이션에서 한글을 처리하지 못하는 경우는 이처럼 코드페이지 적용이 되지 않는 경우에 해당하며, 외국 웹 솔루션의 경우도 인코딩문제로 인해 겪을 수 있는 문제이다.


참고적으로 영문일 경우 확장코드(Extended Code)


그림출처: http://www.eclipse.net/~snowdog/ascii.html


한글 완성형의 경우는 모두 코드페이지 494에 속하며, 커맨드 셸 상에서는 chcp 437 명령에 의해서 영문전용으로 변경이 가능하다

[출처] 상위 아스키코드와 하위 아스키코드|작성자 에디터


AND