기본 콘텐츠로 건너뛰기

라벨이 Output Encoding인 게시물 표시

[ 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 도 영문...