최근 수정 시각 : 2019-09-09 16:06:29

CP949


Code Page 949
1. 개요2. 개발 이유3. 도입4. EUC-KR과의 혼동5. 방식6. 유사품7. 관련 항목

1. 개요

한국어판 Microsoft Windows의 기본 코드 페이지로, 한글 인코딩의 한 종류이며 EUC-KR의 확장형이다. '통합 완성형'이나 '확장 완성형'이라고도 한다. 마이크로소프트가 개발했기 때문에 MS949, Windows-949 등으로도 불린다.

참고로 Java에서는 CP949와 MS949가 구별된다. 이 문서에서 말하는 건 Java의 MS949이며, Java의 CP949는 기존의 EUC-KR과 같다.

2. 개발 이유

KS C 5601:1987를 베이스로 삼은 EUC-KR은 현대 한글에서 자주 이용되는 2350자만을 지원하였기 때문에, 으?으?으로 표기되는 등의 문제가 발생하였다. 게다가 처럼 완성형에는 있는데 중간에 나오는 문자(쓔)가 없어서 입력이 불가능한 사례도 있었다. 이에 따라 나머지 8000여자를 지원하는 인코딩의 필요성이 대두되었다.

KS X 1001 자체에는 한글 채움 문자를 사용하여 없는 글자를 표현하는 방식이 정의되어 있지만 구현상의 어려움으로 인해 Mozilla Firefox를 포함한 몇몇 앱밖에 지원하지 않는다.

3. 도입

CP949는 마이크로소프트가 제정한 규격으로, 한글 Windows 98에 처음으로 탑재되었다.[1] 등장 초기에는 코드순 정렬 방법으로 가나다순 정렬을 구현할 수 없다는 단점과, 마이크로소프트의 독자 규격이 사실상 표준으로 군림하게 됨에 따른 거부감 등의 이유로 많은 질타를 받았으며, 특수 프로그램을 사용해 가면서 조합형을 고집하는 사람들도 있었다. 이후 시간이 지나면서 이러한 논쟁은 잊혀졌다.

현재 윈도우 커널에는 유니코드가 적용되었지만, 한글 윈도우의 명령 프롬프트가 사용하는 기본 인코딩은 여전히 CP949라서 C, C++ 등의 네이티브 프로그래밍 언어를 이용해 UTF-8로 한글 출력을 하려고 하면 한글이 깨져 나오게 된다.

4. EUC-KR과의 혼동

CP949는 Shift_JIS와 EUC-JP처럼 전혀 다른 인코딩이 아니라 단순히 EUC-KR을 확장한 수준이기에 둘을 혼동하는 경우도 흔하다. 이 때문에 EUC-KR과 CP949를 구분하거나, 드물게 EUC-KR만을 지원하는 프로그램에서는 CP949로 작성된 텍스트 파일을 열었을 때 문제가 발생하기도 한다.

한국어 웹사이트 중에는 인코딩으로 EUC-KR을 선언해 두고 CP949로 인코딩된 페이지를 보내는 웹사이트들도 많았는데, 이 때문에 HTML5에서는 아예 EUC-KR로 선언했을 때에도 무조건 CP949로 해석하도록 표준이 정해졌다. 인코딩을 ks_c_5601-1987로 지정하면 인터넷 익스플로러에서는 정상적으로 CP949로 해석하지만, 이게 IE 전용인지라 다른 브라우저에서는 아예 인코딩이 무엇인지 파악하지 못한다는 문제가 발생한다.

Notepad++의 경우 EUC-KR과 CP949를 구분하는데, 어째 CP949로 작성된 문서를 Notepad++로 열면 시스템 기본 인코딩(ANSI)으로 읽는 경우가 흔하다. 한글 윈도우에서는 기본 인코딩 자체가 CP949라 잘 나오지만, 다른 언어 윈도우에서는 당연히 글자가 깨진다. 둘을 굳이 구분해둔 이유는 프로그래밍 시 둘을 다르게 사용하는 경우가 존재해서 그런 듯하다.

5. 방식

CP949에서 새로이 추가된 8000여자는 다음 규칙에 따라 가나다순을 차례대로 2바이트로 할당받았다.
  • 첫 번째 바이트는 0x81~0xC6 사이를 할당받는다.
  • 두 번째 바이트는 0x41~0x5A(대문자 A~Z), 0x61~0x7A(소문자 a~z), 0x81~0xFE를 할당받는다.
  • 단, EUC-KR와의 충돌을 피하기 위해, 첫 번째 바이트가 0xA1 이상인 경우에는 두 번째 바이트가 0xA0을 초과하지 않도록 제한한다.

EUC-KR 자체에는 할당되지 않은 바이트가 꽤 있기 때문에 Shift_JIS에 비해서는 확장이 수월한 편이었으며, 덕분에 호환성 문제도 훨씬 적다. Shift_JIS의 경우에는 반각 가타카나가 확장 영역의 상당수를 잡아먹고 있기 때문에 둘째 바이트의 범위를 엄청나게 넓혀야 했다. 당연히 0x5C 문제도 없다.

6. 유사품

Mac OS 클래식에는 애플판 CP949라고 할 수 있는 "MacKorean"이라는 문자셋이 있었지만 소리소문없이 묻혀 버렸다. MacJapanese의 영향을 받은 건지 표준 KS X 1001에 비해 쓸데없는 특수문자들이 잔뜩 들어가 있는 차이점이 있었다. 지금은 macOS의 문자표에서 그 흔적을 찾아볼 수 있을 뿐이다.

7. 관련 항목



[1] 개발 자체는 Windows 95가 등장한 1995년에 완성되었지만, 용량 문제 때문인지 실제로 채택되지는 않았다. 한컴오피스 한글 97 버전의 도움말에도 이와 관련된 내용이 있다.