인코딩에 대한 이야기 3편. 오늘은 EUC-KR과 CP949에 대해서 잠깐 이야기 해 보도록 하겠습니다. EUC는 아시아계 문자를 표현하기 위해서 개발을 한 코드 체계인데요. 뒤에 KR이 붙었으니까, 한국에서 쓰는 것입니다. 이것은 어떤 특징을 가질까요?

 

 

 그 전에 KS X 1001이라는 체계가 있어요. 이것은 한국 산업 규격으로 지정된, 한국어 문자 집합 체계입니다. 0x30부터 0x48까지, 그러니까 제가 초록색으로 칠한 부분에 '가', '조', '힝'과 같은 완성형 한글 글자 마디가 속해 있어요. 그런데, 그렇게 문자가 많아보이지는 않습니다.

 

 실제로 자주 쓰이는 2350자만, 가나다, 그러니까 사전 순으로 배열했는데요. 한글 문자 갯수가 11176개이니까, 나머지 8000여개는 없는 셈이 됩니다.

 

 


 EUC-KR의 구조입니다. KS X 1003은, Ascii와 유사한데, 역슬래시 자리에 원화 표시가 들어간 것만 달라요. KS x 1001이 [A1-FE][A1-FE]에서 표현이 되는데요.

 

 

 남은 공간이 꽤 많습니다. 이것을 적절히 활용할 수 없을까요?

 

 


 CP949는, 보라색 부분 영역 중 일부에 노란색 영역을 할당 합니다.

 

 

 여기에는 KS X 1001에 없었던, '힣', '힢', '믜'와 같은 문자를 사전 순으로 넣습니다. 그러면, 11176자의 모든 한글 문자를 표현할 수 있나요? 네. 가능합니다. 하지만, 코드 값이 앞선다고, 사전순으로 앞선다는 보장이 없어요. 예를 들어서, '힣' 이라는 문자는 '힝'이라는 문자보다 사전순으로 뒤에 있지만, 코드 값은 앞에 있어요.

 

 그러면, 예제 프로그램 2개를 보도록 하겠습니다.

 

 


 먼저 1번째 예제입니다. "똠", "가", "믜", "힙" 이라는 문자열을 print_char에 넘겨주었습니다.

 

 

 그러면 여기에서는 어떠한 일이 수행이 될까요?

 

 

 일단, EUC-KR 형식으로 인코딩을 합니다. 그리고, 바이트 단위로 인코딩한 값을, 출력을 할 거에요. 그러면 이 4개의 문자열이 어떻게 인코딩 되나 봅시다.

 

 

 "똠"과 "믜"는 3f. 표현할 수 없는 문자였나 봅니다. 실제로, 이것은 EUC-KR로 표현할 수 없습니다. 그러면, CP949로는 가능할까요? 이번에는 실험을 조금 다르게 해 봅시다.

 

 

 '가'부터 '힣'까지 돌면서, print_char를 돌리도록 합시다. t는 빈 문자열에 char형으로 변환된 i를 append 하게 되는데요. 만약에 i가 '각'이라면, t가 "각"이라는 문자열을 가리킬 겁니다.

 

 

 그리고, x-windows-949로 인코딩 합니다. 그러면 어떻게 될까요?

 

 

 '힣'이나, '힢'은 EUC-KR에는 없는 완성형 문자입니다. 하지만 '힝'은 있습니다. 보시면 '힝'의 값이 c8 fe임을 알 수 있어요. 그런데, '힢'이나, '힣'은 '힝'보다 사전순으로 뒤에 있는데, 코드 값은 각각 c6 51과 c6 52입니다. 사전 순으로 뒤에 있는데 코드 값으로 앞에 있습니다.

 

 즉, CP949는 코드 순 정렬로 사전순 sorting을 구현할 수 없습니다.