2017-11-06 1 views
0

오래 전 저는 Windows 콘솔의 기본 코드 페이지 (CP)를 UTF-8 (일본어 문자보기)로 변경하려고했습니다. 내가 사용했던 명령을 기억할 수는 없지만 결국에는 cmd.exe의 문자를 볼 수있게되었습니다. 잠시 후에 cmd.exe를 사용하는 프로그램이 기본적으로 일본어 코드 페이지 932에 있고 OEMCP가 932로 설정되어 있음을 알게되었습니다.이 사실을 알게 된 후 System Locale을 확인하고 영어 (미국)로 변경했습니다. 이렇게하면 OEMCP가 437, which it had으로 변경되어 cmd.exe의 기본 CP가 437이되었음을 의미 했음에 틀림 없습니다. 그러나 OEMCP가 437로 변경된 후에도 cmd.exe의 기본 CP는 다음과 같습니다. still 932.내 OEMCP가 437로 설정된 경우 내 cmd.exe는 왜 기본 코드 페이지 932입니까? 이 문제를 어떻게 해결할 수 있습니까?

그래서 어떻게 기본 CP를 다시 437로 변경할 수 있습니까? 무엇이 CP 932가 될 것인가? 내 PC에서 일본어를 완전히 제거하여 문제를 일으키지 않았는지 확인하고 많은 사람들이 자동 실행 파일을 사용하거나 CP 437을 사용하도록 OEMCP를 변경하라고 지시했지만 OEMCP는 이미 437로 설정되어 있으며 CP 437을 위해 자동 실행 파일을 사용하고 싶지는 않습니다. 이전에는 단순히 기본값으로 사용하기를 원했습니다.

나는 또한 cmd.exe가 열릴 때마다 자동 실행되는 스크립트가있을 수 있다고 들었지만이를 추적하거나 제거하는 방법을 모릅니다.

업데이트 :

문제는 cmd.exe를 사용하여 CP (932)

powershell.exe를 함께 콘솔 창에 대한 기본 구성은 437

답변

1

모두 이미 사용 CP에게에 netsh.exe 있습니다 레지스트리 키 "HKCU \ Console"에 저장됩니다. 이 키에있는 대부분의 등록 정보는 콘솔의 Alt + Space [D] 오류 대화 상자를 사용하여 GUI에서 구성 할 수 있습니다.

프로세스가 새 콘솔을 할당하면 이러한 기본값 중 일부는 프로세스 STARTUPINFO에 의해 직접 무시됩니다. 여기에는 창 위치 및 크기, 화면 버퍼 크기 및 채우기 속성 (텍스트 및 배경색)이 포함됩니다. 프로세스 시작 정보에는 초기 창 제목도 포함됩니다.이 창 제목은 상위 프로세스가 설정하지 않은 경우 응용 프로그램 실행 파일의 정규화 된 경로를 기본값으로합니다. 쉘 단축키 (예 : LNK 파일)를 사용하여 애플리케이션을 실행하면 제목은 실행 파일 대신 바로 가기 파일의 경로가되고 STARTF_TITLEISLINKNAME 플래그가 설정됩니다.

콘솔은 초기 창 제목을 사용하여 창을 사용자 지정하는 추가 속성을로드합니다. STARTF_TITLEISLINKNAME 플래그가 설정되면 응용 프로그램을 시작한 LNK 바로 가기 파일에서 이러한 추가 속성을로드합니다. 그렇지 않으면 정규화 된 제목을 레지스트리의 하위 키로 찾습니다. 제목을 정규화하려면 백 슬래시가 밑줄로 바뀌고 Windows 디렉토리는 "% SystemRoot %"로 바뀝니다. 예를 들어 초기 창 제목이 "Spam \ Eggs"이면 "HKCU \ Console \ Spam_Eggs"에서 설정을 찾습니다. 이 속성은 콘솔의 Alt + Space [P] roperties 대화 상자를 사용하여 GUI에서 구성 할 수 있습니다.

설정할 수있는 속성 중 하나는 "CodePage"라는 DWORD 값입니다. 이것은 입력 및 출력 모두에 대한 초기 레거시 코드 페이지입니다. 콘솔에 항상 기본 설정되어야하는 유니 코드 API가 있기 때문에 "레거시"라고 말합니다. 설정되지 않은 경우 콘솔의 기본값은 OEM 코드 페이지 (예 : 서유럽에서는 850, 미국에서는 437)입니다. LNK 단축키는 ConsoleFEDataBlock에 사용자 정의 코드 페이지를 설정할 수도 있지만 GUI를 사용하거나 심지어 IShellLink COM 인터페이스를 사용하여 수정할 수 없습니다.

예를 들어, cmd.exe는 바로 가기를 사용하는 대신 Win + R 실행 대화 상자에서 직접 실행되며, 기본 창 제목 "C : \ Windows \ System32 \ cmd.exe"를 사용합니다. "HKCU \ Console"의 기본값을로드 한 후 콘솔은 "HKCU \ Console \ % SystemRoot % _System32_cmd.exe"하위 키에서 추가 구성을 찾습니다. "CodePage"값을 설정하면 콘솔의 기본 OEM 코드 페이지가 무시됩니다.

불행히도 모든 콘솔 응용 프로그램의 초기 코드 페이지를 변경하려면 "HKCU \ Console"에서 설정하는 것이 효과가 없다는 점에 실망 할 것입니다. 현재 conhostv2.dll (conhost.exe에서 호스팅 됨)에 의해 구현 된 콘솔의 버그로 인해 "HKCU \ Console"에 기본 "CodePage"값을 설정하면 콘솔은로드하는 동안 간단히이 값을 설정하고 그런 다음 OEM으로 재설정됩니다.

관련 문제