Ⅰ. 문자코드의 정의오늘날 컴퓨터는 인간의 언어행위를 입력하고 처리하기 위해 각 문자마다 고유의 코드값을 부여하였다. 정보 전달에서 양자간 부호체계가 다르면 정보전달 행위가 불가능하므로, 정보생산자와 수신자 사이의 부호체계의 표준화가 필요했기 때문이다. 이러한 코드 값을 컴퓨터가 처리할 수 있는 형태인 이진수의 대응관계로 미리 정의해 놓은 것이 ‘문자 코드’이다. 쉽게 말하면 문자 구현 방식이다.따라서 고유한 코드가 배정되지 않는 문자는 컴퓨터로 입력할 수 없다. 컴퓨터는 많은 코드문자를 배당할 수 있지만, 그렇다고 무한정 가능한 것이 아니므로 코드를 부여할 문자를 결정하는 것은 여전히 중요한 문제이다. 처음 영어권에서 컴퓨터가 만들어졌으므로 문자 코드 역시 영어였다. 영문자의 국제적 표준은 128개의 문자를 나타내는 ASCII코드다.Ⅱ. 우리말을 정의하는 한글코드① 한글코드의 정의 - 국내에 차츰 컴퓨터가 보급되면서 한글을 처리하는 프로그램이 요구되고, 한글문자코드가 필요하게 되었다. 한글은 음소문자인 동시에 음절문자의 특징을 가짐으로써 한글코드의 구현이 어렵다는 문제점이 있었다. 즉, 26자의 영문자를 풀어쓰는 영미권에서는 최대 256개의 문자를 처리하는 ASCII(아스키?)코드가 문제가 없었지만 한글은 음소문자이면서 음절단위로 모아쓰기 하는 방식으로 인해 11172개의 한글을 구성하기 위해서는 독자적인 다른 방법을 취할 수 밖에 없었다.② 한글코드 분류 기준- 조합원리 : 한글 1음절을 표현하는 데 어떠한 조합원리를 사용하는가?(조합형, 완성형)- 바이트 수 : 한글 1음절을 구성하는데 필요한 바이트 수는 얼마인가?(N바이트, 3바이트, 2바이트)- 8번째 비트 : 한글 데이터를 구성하는 데 8번째 비트를 사용하는가?(7비트, 8비트)③ 한글코드 종류- N바이트 한글코드 : ASCII코드에 한글을 1:1로 대응시키는 방법이다. 한글인지 로마자인지 구분할 수 없으므로 한글의 시작과 끝 지점을 알려주는 코드로 Shift-out, Shift-in이라는 제어문자지가 한 글자인지 알기 위해 앞뒤글자를 살펴보아야 하며, 한글 정렬이 엉킨다는 문제가 많았다.- 3바이트 한글코드 : 한글의 1음절을 초/중/종성으로 나누어 각각 1바이트씩 나누어 처리하고, 받침이 없는 글자는 채움 코드로 대체하였다. 그러나 1음절이 3바이트로이므로 메모리 용량이 커진다는 것과 한글 한글자의 크기가 영문 세 글자의 크기와 같아져 어색하다는 단점이 있어 금방 사라지게 되었다. N바이트와 거의 비슷하며, 복모음과 복자음, 종성이 없는 음절의 표현 방식만 차이가 있다.- 자소형 한글코드 : 받침이 없을 때는 2바이트, 받침이 있는 경우는 3바이트를 사용하는 N바이트와 3바이트 한글코드의 절충형이다. 현재 인터넷 정보 검색, 맞춤법 검사, 자동색인 등에서 사용한다.- 8비트 2바이트 조합형 한글코드 : 한글을 초/중/종성으로 나누어 각각 5비트씩, 2바이트로 만들어 한 글자를 표현하는 것이다. 2바이트는 16비트이므로 초성의 최상위 1비트가 남게 되는데, 이것을 한글과 영문으로 구분하는 용도로 사용한다. 최상위 비트가 0이면 ASCII문자를, 1이면 한글 1음절을 표현하는 것이다. 훈민정음 창제원리를 사용하여 음절/음소 정보를 효과적으로 해석할 수 있었고, 한글 1음절의 길이가 일정하다는 특성을 가지고 있어 내부 처리에 매우 적합하여 KS 완성형코드가 출현하기 전까지 사용되었다. KS완성형 코드가 등장하고 이로 작성된 데이터와 호환되지 않아 거의 사용하지 않게 되었다.- 확장 완성형 코드 : Microsoft사가 제정해 사용하는 코드로, 공식적인 표준코드는 아니며 기본적으로 KS완성형 코드를 그대로 사용하면서 기존에 표현할 수 없었던 한글 8822자를 사용하지 않는 영역에 추가로 배정하여 사용하는 형식이라 현대어 11172자를 모두 처리할 수 있게 되었다. 또한 사전식 순서 배열을 위해 WIN-API로 보완하였다.- 유니코드 : 전 세계 컴퓨터의 다국어 언어를 효율적으로 처리하기 위해 국제 표준으로 제정된 2바이트계의 한국 공통의 국제문자부호체계(U 형식의 조합형 방식 코드로 배열하였다. 표준 완성형 코드와 거의 비슷하나, 자모 단위가 아니라 음절 단위로 코드를 부여한 점이 다르다. 한국에서는 이를 KSC5700으로 국가 표준코드로 제정하였으며, 현재는 유니코드 6.0이 사용되고 있다. 유니코드에서는 완성형과 조합형 간의 변환이 별도의 변환테이블 없이 코드 값의 수식 계산으로 가능하다.출처 : http://blog.naver.com/chobitsll00?Redirect=Log&logNo=123960564Ⅲ. 대표적인 부호계의 예① KSC5601 부호계- 정의 : KSX 1001은 한국 산업 규격으로 지정된 한국어 문자 집합으로, 정식 규격명은 "정보 교환용 부호계 (한글 및 한자)"이며 옛 이름인 KSC 5601로도 알려져 있다. 1974년에 처음으로 제정되었고, 2004년에 개정된 "KS X 1001:2004"가 최신 규격 이다. 이 규격은 2바이트 부호계로서, x2121 - x7E7E까지 영역에서 8,836문자의 표현을 규정하는데, 문자는 제어 문자와 도형 문자로 분류하며, 도형 문자는 특수 문자, 괘선 조각, 숫자, 한글 낱자, 한글 글자 마디, 한자, 기본 로마 문자, 확장 로마 문자, 그리스 문자, 가나 문자, 키릴 문자로 구성되어 있다. 한글 부분은 기본 적으로 2바이트 완성형 코드이지만, 부속서 3에서 2바이트 조합형 코드도 보조 부호계로서 규정되어 있다. KS X 1001은 유니코드를 제외하고 대한민국에서 사용되는 거의 유일한 문자 집합이다. KS X 1001 기반의 문자 인코딩으로는 EUC-KR(완성형)과 ISO-2022-KR (과거 인터넷 메일에서 쓰던 문자 인코딩)이 있다. MS 윈도에서 사용하는 CP949은 EUC-KR의 확장으로 2바이트로 표현할 수 없는 한글 글자 마디 8,821자를 추가한 것이다.- 단점 : KS X 1001에 모든 현대 한글을 표현할 수 있는 방법이 존재하는데도 대부분의 프로그램들이 구현하지 않고 있다. 따라서 KS X 1001은 사실상 2350자의 한글만 지경우 CP949의 확장 한글을 쓰거나, 과 같은 SGML(메타언어)의 문자 번호 참조를 사용한다. 그 외에 한글 독음이 다르고 모습이 같은 한자가 중복 되어 있기 때문에 나타나는 처리상의 문제도 있는데, 유니코드에 이런 특성이 고려되어 모든 중복된 한자가 유니코드 호환성 영역에 수록되기도 했다. 또한 한글 코드에 한글보다 한자가 더 많이 들어갔다고 비판하는 사람도 있다.② ISO-2002-KR 부호계- 정의 : ISO-2002-KR은 조사결과 ISO-2022-KR과 동일한 부호계로 국제표준화기구에서 제정한 한글부호화의 표준 이다. 문자 집합을 7비트 부호 또는 8비트 부호로 표현하기 위한 기술이며 둘 이상의 문자 집합을 하나의 문자 부호화 방식으로 모두 표현하는 기술이다. ISO-2022는 7 비트 인코딩으로 제한 시스템에 문자의 대형 집합을 대표하는 방법이다. 현대 컴퓨터의 대부분은 각 바이트의 8 비트를 사용한다. ISO-2022는 검색, 삽입하거나 문자를 삭제하려면 텍스트 블록의 중간에 뛰어 쓸 수 없다. 때문에 텍스트가 복잡하고 느려서 비효율적이기 때문에 인코딩을 할 때는 쓰지 않는다. 문자는 ISO에서 여러 가지 방법으로 표현할 수 있기 때문에 ISO-2022의 특성으로 인해 시각적으로 동일한 문자열을 비교적 안정적으로 표현할 수 있다. 일부 DICOM 여러 전자 메일 클라이언트, 다른 인코딩 외에도 ISO-2022를 사용하는 유사 유형의 시스템을 만들었다. 컴퓨터에서 텍스트를 전송하는 여러 개의 문자를 포함하는 기술이 하나의 세트에서 문자 인코딩을 하고, 7 비트로 표현할 수없는 문자 집합을 표현해 주는 대표적인 기술로 사용된다. 그리고, 하나의 문자 인코딩 내에서 여러 문자 집합의 문자를 나타내는 데 큰 문자 집합을 나타내기 위해 개발되었다.③ EUC-KR 부호계- 정의 : EUC-KR은 KS X 1001와 KS X 1003을 사용하는 8비트 문자 인코딩으로, EUC의 일종이며 대표적인 한글 완성형 인코딩이기 때문에 보통 완성형이라고 불린다. EU에 배당된 "위"라는 글자는 EUC-KR에서 C0 A7라는 바이트 열로 표현된다. KS X 1001에는 한글 채움 문자를 사용하여 규격의 문자 집합에 포함되지 않은 한글을 표현하는 확장 방법이 있지만, 대부분의 경우 이 방법은 EUC-KR에서 사용되지 않고 대신 CP949와 같은 다른 방법을 사용하여 KS X 1001 바깥의 현대 한글을 표현한다.④ UTF-8 부호계- 정의 : UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로, 켄 톰프슨과 롭 파이크가 만들었다. 본래는 FSS-UTF 이라는 이름으로 제안되었다. UTF-8 인코딩은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다. 예를 들어서, U+0000부터 U+007F 범위에 있는 ASCII 문자들은 UTF-8에서 1바이트만으로 표시된다. 4바이트로 표현되는 문자는 모두 기본 다국어 평면(BMP) 바깥의 유니코드 문자이며, 거의 사용되지 않는다. UTF-16과 UTF-8 중 어느 인코딩이 더 적은 바이트를 사용하는 지는 문자열에서 사용된 코드 포인트에 따라 달라지며, 실제로 DEFLATE와 같은 일반적인 압축 알고리즘을 사용할 경우 이 차이는 무시할 수 있을 정도이다. 이러한 압축 알고리즘을 사용하기 힘들고 크기가 중요할 경우 유니코드 표준 압축 방식을 대신 사용할 수 있다.- 장점 : UTF-8은 모든 유니코드 문자를 표현할 수 있다. 예를 들어서, UCS-2는 BMP 안의 문자만을 표현할 수 있다. 바이트 경계를 순서대로 혹은 역순으로 찾기 쉽다. 만약 여러 바이트로 표시된 문자의 중간에서 찾기 시작한다면, 단지 해당 문자만 손실되고 나머지 문자들은 손상을 입지 않는다. 기존의 많은 다중바이트 인코딩들은 이러한 재동기화가 훨씬 힘들다. 한 문자를 표현하는 바이트 표현은 다른 문자를 표현하는 어떤 바이트 표현에도 포함되지 않는다. 따라서 ASCII 문자가 아닌 값들에 투명한 파일 시스템이나 다른 소프트웨어(예를 들어서 C의 printf() 함수)와 호환성을 가진다.