[인코딩] EUC-KR vs CP949
금주에 고객에게 제공받은 파일을 DB(DataBase)에 적재하는 작업을 하게 되었다. 적재 작업에서 인코딩 에러가 빈번하게 발생했다. 그래서 사용하는 에디터를 사용해서 해당 파일을 인코딩이 한국어라고 쓰여있는 걸 확인했다. 한국어라는 걸 보고 기본적으로 EUC-KR로 인식을 했고 같이 협어하던 개발자들에게 공유를 했다. 그런데 한 개발자가 CP949를 EUC-KR로 잘못 알고 말한 거 아닌지 질문을 던졌다. 지금까지 EUC-KR과 CP949를 구분해서 생각을 하고 있지 않아서 당황하며 다시 확인을 해보기로 했다. EmEditor를 사용해서 파일을 열어보니 CP949 인코딩을 확인 할 수 있었고 다시 개발자들에게 공유를 했다.
이번 일을 통해 EUC-KR과 CP949 인코딩은 다른 것이라는 걸 알았다. 그래서 이번 기회에 EUC-KR과 CP949 인코딩에 대해서 간단히 정리하며 공부해보려고 한다.
1. EUC-KR
1) 설명
EUC-KR은 KS X 1001(한국어 문자 집합 한국 산업 규격)과 KS X 1003(로마자 문자 집합 한국 산업 규격)을 사용하는 8비트 문자 인코딩이다. EUC(Extended Unix Code)에 속하는 한글 완성형 인코딩이다.
1. 128보다 작은 바이트는 KS X 1003에 할당
2. 128보다 크거나 같은 바이트는 KS X 1001에 할당
- 완성형 한글은 0x30 ~ 0x48영역에 2350자만 가나다 순서대로 할당
- KS X 1001 한글 표 참고 URL
https://ko.wikipedia.org/wiki/KS_X_1001_%ED%95%9C%EA%B8%80_%EB%B6%80%EB%B6%84_%ED%91%9C
2) 문제점
EUC-KR의 경우 위에서 설명했듯이 2350자의 완성형 한글만 표현을 할 수가 있었다. 이로 인해 2350자 이외의 다른 문자는 표현할 수 없는 문제가 있었다. 그래서 MicroSoft에서는 완성형 문자 8000+개를 EUC-KR에 추가한 CP949라는 인코딩을 도입했다.
2. CP949
1) 설명
CP949(Code Page 949)는 Microsoft에서 도입한 코드 페이지이며 EUC-KR의 확장된 버전이다. EUC-KR에서 사용된 KS X 1001 이외의 범위에 한글 가나다 순서대로 8822자를 할당 했으며, KS X 1001과의 충돌을 막기 위해 할당된 두번 째 바이트는 161이상의 값을 가질 수 없게 했다.
1. 128보다 작은 바이트에 KS X 1003 할당
2. 128보다 크거나 같은 두 바이트에 KS X 1001을 할당
3. 나머지 공간에 KS X 1001에 없는 8822자의 한글을 가나다 순서대로 할당
4. 한글 채움 문자의 부호값은 A4D4
2) 문제점
CP949의 문제점은 EUC-KR에서 확장해서 만들어진 것에서 기인한다. 기존에 할당된 영역 이외의 부분에 문자를 할당했기 때문에 문자 정렬을 하기 어렵다는 것이다.
예를 들면 “갘”(814A)을 통해서 보여줄 수 있다. “갘”의 경우 문자를 정렬을 제대로 이루어지게 하려면 EUC-KR의 “갗”(B0AF)과 “같”(B0B0) 사이의 값을 가지고 있어야 한다. 하지만 실제로 CP949의 경우 “갘”은 해당 범위와 전혀 동떨어진 814A 값을 가지고 있어서 기본적인 정렬로는 원하는 결과를 얻기 어렵게 된다.
3. 정리
이번 기회에 간단하게 EUC-KR과 CP949에 대해서 조사와 정리를 해보았다. 하면서 인코딩 문제라는 게 쉽지 않다는 걸 알게 되었다. 그리고 인코딩 중 EUC-KR과 CP949를 알아가는 것도 문자집합, 한글 채움 문자, 조합형, 완성형 등에 대한 개념들이 더 필요해서 쉽지 않았다. 그래서 매주 인코딩에 대해서 공부를 하며 계속해서 게시글을 올릴 것이다. 그런 중에 EUC-KR과 CP949에 대한 정리가 더 된다면 글을 수정해갈 것이다.
4. 참고
- https://ko.wikipedia.org/wiki/EUC-KR
- https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80_949