답변:
chcp 는 활성 코드 페이지를 제공합니다.
systeminfo 는 시스템 로케일과 입력 로케일을 표시합니다.
" 참고 :이 명령 (systeminfo)은 Windows 2000에서 사용할 수 없지만 Windows XP 또는 Windows 2003 컴퓨터에서이 명령을 실행하여 Windows 2000 컴퓨터를 쿼리하고 원격 컴퓨터를 Windows 2000 컴퓨터로 설정할 수 있습니다. 현재 사용자가 로그온 한 경우 명령에 이미 원격 컴퓨터 (예 : 도메인 관리자)에 대한 권한이 있으므로 / u 및 / p를 사용할 필요가 없습니다. "
에서 여기 .
참고 주어진 시스템은이 두 가지 관심의 활성 코드 페이지를 기존 설정라는 이름의 결정에 따라, 유니 코드를 지원하지 않는 프로그램 용 언어 이전으로 알려진, 시스템 로케일 (배경 정보는 아래 섹션 참조)
참고 : 코드 페이지 가 두 개 더 있지만 더 이상 사용되지 않으므로 여기서는 설명하지 않습니다. EBCDIC 코드 및 (OS 이전 X) Mac 코드 페이지 -WinAPI 문서를 참조하십시오 .
활성 OEM 코드 페이지가 가장 쉽게 통해 얻을 chcp
같이 잊혀진 세미콜론의 도움이 대답 명시 적으로 세션에서 변경되지 않았습니다 가정 - chcp <codePageNum>
.
활성 ANSI 코드 페이지를 결정하는 것은 간단하지 않지만 시스템 로캘 의 이름과 언어 를 결정하는 데 PowerShell 이 도움이 될 수 있습니다 .
에서 윈도우 8 + / 윈도우 서버 2012+ 를 사용하여 : Get-WinSystemLocale
cmdlet를 :
Get-WinSystemLocale | Select-Object Name, DisplayName,
@{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } },
@{ n='ACP'; e={ $_.TextInfo.AnsiCodePage } }
참고 : [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage
예를 들어 사용 하고 싶은 유혹이있을 수 있지만 반드시 시스템 전체의 활성 ANSI 코드 페이지를 반영하는 것은 아닙니다 . 대신, 현재 사용자의 로캘 (문화) 과 관련된 ANSI 코드 페이지 이며, 이는 다를 수 있습니다.
미국 영어 시스템에서 위의 결과는 다음과 같습니다.
Name DisplayName OEMCP ACP
---- ----------- ----- ---
en-US English (United States) 437 1252
OEMCP
OEM 코드 페이지, ACP
ANSI 코드 페이지입니다.
이전 시스템 에서 Windows XP까지 작동 하는 레지스트리 기반 방법 :
# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage |
Select-Object OEMCP, ACP
미국 영어 시스템에서 위의 결과는 다음과 같습니다.
OEMCP ACP
----- ---
437 1252
당신은 또한 원하는 경우 얻을 시스템 로케일의 [쉬운] 이름 과 LCID (주하지만 LCID 수는 사용되지 않습니다 있음)
[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
).Default)
)
미국 영어 시스템에서 위의 결과는 다음과 같습니다.
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
배경 정보 :
시스템 로케일 은이제 비 유니 코드 프로그램 ( NLS 용어 참조)에 대해 보다 기술적으로 언어 라고하는 기존 이름 이며 이름 에서알 수 있듯이 다음과 같습니다.
이 설정은 레거시 프로그램 (유니 코드를 지원하지 않는 프로그램) 에만 적용됩니다 .
그것은 적용 시스템 전체 에 상관없이 주어진으로, 사용자의 로케일 설정 및 관리 권한을 변경해야합니다.
그것은이다 주목하는 것이 중요하다 기존 설정 하기 때문에, 코드 페이지가 더 이상 유니 코드를 사용하는 프로그램에 적용되지 는 Windows API의 유니 코드 버전을 내부적으로 호출합니다.
특히 활성 코드 페이지 , 즉 기본적으로 사용되는 문자 인코딩을 결정합니다 .
ANSI 코드 페이지는 유니 코드를 지원하지 않는 프로그램은의, 특히 ANSI 버전의 윈도우 API의 비 유니 코드 (ANSI) 버전을 호출 할 때 사용하는 방법 TextOut
과 특히 유니 코드에서 문자열을 변환하는 기능 프로그램의 문자열이의 렌더링 방법을 결정 GUI .
OEM 코드 페이지는 기본적으로 활성화하기 에 콘솔 창 에 의해 반영, chcp
.
65001
유니 코드의 UTF-8 인코딩을 나타내는 의사 코드 페이지 사용은 해결책이지만 레거시 명령 줄 프로그램이 데이터를 잘못 해석하거나 실패 할 수도 있습니다. 자세한 내용 은 이 StackOverflow 답변 을 참조하십시오.850
실행 합니다.chcp 850
cmd.exe
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
레거시 용어로 사용 된 로캘 이라는 단어 와 현재 용어 로 사용되는 단어 언어 에도 불구하고 :
에만 설정에 의해 제어 측면이 있습니다 활성 코드 페이지 설정 및 기본 비트 맵 글꼴 이 아니라도 (사용자 수준 로케일 설정에 의해 제어되는) 로케일의 다른 요소.
주어진 코드 페이지는 일반적으로 많은 로켈이 공유 및 커버 여러 언어; 예를 들어, 널리 사용되는 1252
코드 페이지 는 영어를 포함한 많은 서유럽 언어에서 사용됩니다.
그러나 제어판을 통해 설정을 변경하면 특정 로캘을 통해 설정 을 선택합니다 .
모든 Windows 코드 페이지 목록은 https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers를 참조 하십시오.
GetACP()
함수 -technet.microsoft.com/ko-kr/dd318070- 흥미로운 링크입니다. 비고 섹션에서이 함수의 반환 값은 사용자가 선택한 기본 입력 언어와 GUI 언어를 나타내지 않지만 완전히 다른 것을 나타냅니다 ...
활성 코드 페이지를 리턴하는 Windows API는 GetConsoleOutputCP () 입니다.
chcp
명령) 으로 재정의 된 경우에만
chcp
하면 활성 얻을 것이다 OEM의 코드 페이지를. 답변에 mklement가 언급했듯이 Windows에서 ANSI 코드 페이지라는 다른 활성 코드 페이지가 항상 있습니다. 자세한 내용은 mklement 's answer를 참조하십시오 .