기본 콘텐츠로 건너뛰기

라벨이 949인 게시물 표시

Console 인코딩 변경하기

Console/Cmd 에서 인코딩 변경하기 Markdown 문서를 HTML 문서로 변경을 하는데 Universal Document Converter 인 Pandoc 을 사용해서 작업 중인데 Command Console 에서 뜬금없이 모든 한글이 깨져서 나오는 증상이 발생했다. 발생 원인 문제의 발생은 모든 Markdown 문서와 코드들을 UTF-8 기준으로 작업을 했지만 Command Console 은 Windows 기본 인코딩인 949 를 사용하기 때문에 변환했을 때 문자열이 깨진다. 해결 방법 문제의 해결은 은근 간단하다. # 영문 모드로 변경 > chcp 437 # 한글 모드로 변경 > chcp 949 # UTF-8 모드로 변경 > chcp 65001 예외 사항 만일 위의 명령을 실행했을 때 잘못된 코드 페이지 라는 메시지가 출력될 경우는 윈도우 10 버전일 경우는 제어판 > 국가 또는 지역 > 관리자 옵션 탭 에서 유니코드를 지원하지 않는 프로그램용 언어 부분에서 시스템 로캘 변경 버튼을 눌러 언어를 선택하면 된다. 만일 다른 윈도우 버전이라면 위와 유사한 메뉴가 있을 것이므로 찾아보고 처리하면 될 듯 하다. 참고 사항 Console 창의 타이틀 메뉴에서 속성을 통해서 폰트와 여러 가지 속성을 설정할 수 있다. 폰트는 다른 방식으로 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont 에서 코드 페이지 값에 맞는 키 (ex. 949, REG_SZ, 돋움)를 생성해서 사용할 폰트를 설정해도 된다. Unix 또는 Linux 에서는 /etc/my.conf 파일에 default-character-set=utf8 을 설정해서 인코딩을 변경하면 된다고 하는데 사용 환경이 아니라서 검증은 해 보지 못했다. MYSQL 을 사용하는 경우라면 MYSQL command 창에서 set character set euckr; 명령

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