기본 콘텐츠로 건너뛰기

[ TIP ] OS 에 다른 Language Pack 이 설치된 경우의 코드 페이지 찾기

C# 에서 Code Page 를 찾는 방법은 여러 가지가 존재하지만 그중에서 좀 많이 사용되는 방식은 아래와 같다.
  • Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage
  • Encoding.Default.CodePage
그런데 영문 OS 를 설치해 놓고 한글 Language Pack을 설치하여 한글을 사용하는 경우는 위의 두 가지 방식으로는 제대로된 Code Page를 얻을 수 없다. 테스트를 해 본 결과 모두 1521 을 반환한다.

Windows 의 Code Page 리스트는 여기를 참고하면 알 수 있다. 그런데 실제로 해당 PC 에서 Command 창을 열고 chcp 명령을 치면 한글 Language Pack을 쓰고 있기 때문에 "949"로 나온다. 실제 영문 OS 에서는 chcp 를 치면 437 이 나온다.

437 이라는 코드는 MS-DOS 의 미국 코드 페이지 번호를 의미한다. 물론 949 는 한글 코드 페이지를 의미한다. 그럼 949 코드를 얻을 수 있는 방법은 뭘까?

영문 OS 에 한글 Language Pack 을 설치한 PC 에서는 437 대신에 949 가 나온다. 그리고 Culture 나 Encoding 을 통해서는 1521 이 나온다. 그럼 949 는 뭘 기준으로 나온 값일까???? 혹시나 해서 UI 와 관련된 UICulture 를 검사해 봐도 1521 이 나온다.

여기서 힌트가 될 수 있는 것이 cmd 를 실행해서 chcp 를 한 것이다. 즉, 콘솔로 출력이 되는 상황에서 코드 페이지를 검사하면 되지 않을까??? 하는 엉뚱한 생각이 들었다.... 바로 테스트...

Console.OutputEncoding.WindowsCodePage

쩝!!! 949 나온다 -_-;;;

나름대로 짱구를 굴려 본 것이 OS 자체는 영문이기 때문에 기본 Culture는 제어판에서 변경하지 않는 한은 영문일 것이고, 기본 Encoding 도 영문일 것이다. 하지만 UI 에서 사용하는 경우에 한글을 처리하기 위해서 Language Pack을 설치한 것이기 때문에 실제 출력이 발생하는 경우에 대한 것을 검증하면 된다는 것이다....

물론 이런 결론이 엉뚱한 추측이고, 정확한 상황 파악이 아닐 수도 있다. 그러나 이런 상황에서 위의 명령을 통해서 코드 페이지를 얻을 수 있었다는 것이 나름의 수확이다.

댓글