문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 CP949 (문서 편집) [include(틀:한글 전산화)] [목차] == 개요 == 한국어판 [[Microsoft Windows]]의 기본 코드 페이지로, [[한글 인코딩]]의 한 종류이며 [[완성형|EUC-KR]]의 확장형이다. '통합 완성형'이나 '확장 완성형'이라고도 한다. [[마이크로소프트]]가 개발했기 때문에 MS949, Windows-949 등으로도 불린다. == 개발 이유 == [[완성형|KS C 5601:1987]]를 베이스로 삼은 EUC-KR은 현대 한글에서 자주 이용되는 2350자만을 지원하였기 때문에, '으쌰으쌰'가 '으?으?'으로 표기되는 등의 문제가 발생하였다. 게다가 [[쓩]]처럼 완성형에는 있는데 중간에 나오는 문자(쓔)가 없어서 입력이 불가능한 사례도 있었다. 이에 따라 나머지 8000여자를 지원하는 인코딩의 필요성이 대두되었다. ~~[[설렁탕을 사왔는데 왜 먹지를 못하니|쓩이라는 문자가 있는데 왜 입력하질 못하니]]~~ KS X 1001 자체에는 [[한글 채움 문자]]를 사용하여 없는 글자를 표현하는 방식이 정의되어 있지만 구현상의 어려움으로 인해 [[파이어폭스(웹 브라우저)|Mozilla Firefox]]를 포함한 몇몇 앱밖에 지원하지 않는다. == 도입 == CP949는 [[Microsoft|마이크로소프트]]가 제정한 규격으로, 한글 [[Windows 98]]에 처음으로 탑재되었다.[* 개발 자체는 1995년에 완성되었지만, 정작 [[Windows 95]]에는 탑재되지 않았다. [[한컴오피스 한글]] 97 버전의 도움말에도 이와 관련된 --조합형 부심섞인-- 내용이 있다.] 등장 초기에는 코드순 정렬 방법으로 가나다순 정렬을 구현할 수 없다는 단점과, 마이크로소프트의 독자 규격이 [[사실상 표준]]으로 군림하게 됨에 따른 거부감 등의 이유로 많은 질타를 받았으며, 특수 프로그램(HWP, IME)을 사용해 가면서 [[조합형]]을 고집하는 사람들도 있었다. 이후 시간이 지나면서 이러한 논쟁은 잊혀졌다. 현재 윈도우 커널에는 [[유니코드]]가 적용되었지만, 한글 윈도우의 [[명령 프롬프트]]가 사용하는 기본 인코딩은 여전히 CP949라서 [[C언어|C]], [[C++]] 등의 네이티브 [[프로그래밍 언어]]를 이용해 [[UTF-8]]로 한글 출력을 하려고 하면 한글이 깨져 나오게 된다. == EUC-KR과의 혼동 == CP949는 [[Shift_JIS]]와 EUC-JP처럼 전혀 다른 인코딩이 아니라 단순히 [[EUC-KR]]을 확장한 수준이기에 둘을 혼동하는 경우도 흔하다. 이 때문에 EUC-KR과 CP949를 구분하거나, 드물게 EUC-KR만을 지원하는 프로그램에서는 CP949로 작성된 텍스트 파일을 열었을 때 문제가 발생하기도 한다. 한국어 웹사이트 중에는 인코딩으로 EUC-KR을 선언해 두고 CP949로 인코딩된 페이지를 보내는 웹사이트들도 많았는데, 이 때문에 [[HTML5]]에서는 아예 EUC-KR로 선언했을 때에도 무조건 CP949로 해석하도록 표준이 정해졌다. [[Notepad++]]의 경우 EUC-KR과 CP949를 구분하는데, 어째 CP949로 작성된 문서를 Notepad++로 열면 시스템 기본 인코딩(ANSI)으로 읽는 경우가 흔하다. 한글 윈도우에서는 기본 인코딩 자체가 CP949라 잘 나오지만, 다른 언어 윈도우에서는 당연히 글자가 깨진다. 둘을 굳이 구분해둔 이유는 프로그래밍 시 둘을 다르게 사용하는 경우가 존재해서 그런 듯하다. == 방식 == 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]] 문제도 없다. == 유사품 == [[Mac OS]] 클래식에는 [[Apple|애플]]판 CP949라고 할 수 있는 "MacKorean"이라는 문자셋이 있었지만 소리소문없이 묻혀 버렸다. MacJapanese의 영향을 받은 건지 표준 KS X 1001에 비해 쓸데없는 특수문자들이 잔뜩 들어가 있는 차이점이 있었다. 지금은 [[macOS]]의 문자표에서 그 흔적을 찾아볼 수 있을 뿐이다. 거의 쓰이지 않지만 IBM이 정의한 코드 페이지 949라는 것이 또 있다. 이 인코딩은 EUC-KR에서 싱글 바이트 코드 0x80-0x84와 더블 바이트 코드 0x8FA1~0xA0FE 영역에 약간의 커스텀을 추가한 것으로, MS의 CP949와는 EUC-KR 영역을 제외하고는 전혀 호환되지 않는다. [[Java]]는 이 인코딩을 CP949로, MS의 CP949는 MS949로 이름붙여 놓았기 때문에 혼동하기 쉽다. == 관련 문서 == * [[BOM]] * [[알트 입력법]] * [[한글 인코딩]] == 외부 링크 == * [[https://charset.fandom.com/ko/wiki/CP949|문자 집합 위키의 CP949 표]] [[분류:컴퓨터]][[분류:문자 전산 처리]]저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기