현재 OS의 CodePage 및 로캘을 수동으로 확인하는 방법


13

사용자가 수동으로 현재 코드 페이지와 Windows OS의 로캘을 찾도록하는 방법이 있습니까? 해당 정보를 저장하는 레지스트리 설정이 있습니까?

이 기술이 Windows 2000으로 완전히 작동하는 경우에도 유용합니다.

답변:


16

chcp 는 활성 코드 페이지를 제공합니다.

systeminfo 는 시스템 로케일과 입력 로케일을 표시합니다.

" 참고 :이 명령 (systeminfo)은 Windows 2000에서 사용할 수 없지만 Windows XP 또는 Windows 2003 컴퓨터에서이 명령을 실행하여 Windows 2000 컴퓨터를 쿼리하고 원격 컴퓨터를 Windows 2000 컴퓨터로 설정할 수 있습니다. 현재 사용자가 로그온 한 경우 명령에 이미 원격 컴퓨터 (예 : 도메인 관리자)에 대한 권한이 있으므로 / u 및 / p를 사용할 필요가 없습니다. "
에서 여기 .


1
점에 유의 chcp하면 활성 얻을 것이다 OEM의 코드 페이지를. 답변에 mklement가 언급했듯이 Windows에서 ANSI 코드 페이지라는 다른 활성 코드 페이지가 항상 있습니다. 자세한 내용은 mklement 's answer를 참조하십시오 .
kangalioo 2012

6

참고 주어진 시스템은이 두 가지 관심의 활성 코드 페이지를 기존 설정라는 이름의 결정에 따라, 유니 코드를 지원하지 않는 프로그램 용 언어 이전으로 알려진, 시스템 로케일 (배경 정보는 아래 섹션 참조)

  • OEM의 레거시가 사용하는 코드 페이지 콘솔 응용 프로그램,
  • ANSI의 레거시가 사용하는 코드 페이지 의 GUI 응용 프로그램.

참고 : 코드 페이지 가 두 개 더 있지만 더 이상 사용되지 않으므로 여기서는 설명하지 않습니다. EBCDIC 코드 및 (OS 이전 X) Mac 코드 페이지 -WinAPI 문서를 참조하십시오 .

활성 OEM 코드 페이지가 가장 쉽게 통해 얻을 chcp같이 잊혀진 세미콜론의 도움이 대답 명시 적으로 세션에서 변경되지 않았습니다 가정 - chcp <codePageNum>.

활성 ANSI 코드 페이지를 결정하는 것은 간단하지 않지만 시스템 로캘 의 이름과 언어 를 결정하는 데 PowerShell 이 도움이 될 수 있습니다 .

에서 윈도우 8 + / 윈도우 서버 2012+ 를 사용하여 : Get-WinSystemLocalecmdlet를 :

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

OEMCPOEM 코드 페이지, ACPANSI 코드 페이지입니다.

이전 시스템 에서 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 답변 을 참조하십시오.
    • ANSI 코드 페이지와는 달리, 당신은 할 수 주어진 콘솔 창에 대한 수요에 활성 [OEM] 코드 페이지를 변경 ; 예를 들어 OEM 코드 페이지로 전환하려면 에서 및 PowerShell에서 850실행 합니다.chcp 850cmd.exe$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
  • 또한 EBCDICMac 코드 페이지 는 거의 사용되지 않습니다 .

레거시 용어로 사용 된 로캘 이라는 단어 와 현재 용어 사용되는 단어 언어 에도 불구하고 :

  • 에만 설정에 의해 제어 측면이 있습니다 활성 코드 페이지 설정 및 기본 비트 맵 글꼴 이 아니라도 (사용자 수준 로케일 설정에 의해 제어되는) 로케일의 다른 요소.

  • 주어진 코드 페이지는 일반적으로 많은 로켈이 공유 및 커버 여러 언어; 예를 들어, 널리 사용되는 1252코드 페이지 는 영어를 포함한 많은 서유럽 언어에서 사용됩니다.

그러나 제어판을 통해 설정을 변경하면 특정 로캘을 통해 설정 선택합니다 .

모든 Windows 코드 페이지 목록은 https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers를 참조 하십시오.


GetACP()함수 -technet.microsoft.com/ko-kr/dd318070- 흥미로운 링크입니다. 비고 섹션에서이 함수의 반환 값은 사용자가 선택한 기본 입력 언어와 GUI 언어를 나타내지 않지만 완전히 다른 것을 나타냅니다 ...
Arioch 'The

사실, @ Arioch'The - 나는 배경 정보 섹션에 명확하게 뭘하려한다 : 시스템 로케일 (A)를 결정하는 코드 페이지 (그러나 다른 로케일 설정) 시스템 전체 의 (b) 에 관계없이 주어진 사용자의 장소. 링크 된 페이지의 상태 (강조 추가) : " 운영 체제에 대한 현재 Windows ANSI 코드 페이지 (ACP) 식별자 반환합니다 ." 잠재적 인 AppLocale 타사 교체에 대해서는 답변에 대한 링크를 추가했습니다.
mklement

1
GetACP의 발언 / 링크는 MBCS에서 유니 코드로의 기본 변환이 일부 Windows 버전의 구현 세부 사항뿐만 아니라 사용자 독립적이고 OS 전역으로 의도 되었다는 "신의 말씀"확인으로 중요하다고 생각합니다 .
Arioch '

1
아마도 오늘날 유닉스 이전의 MAC과 EBCDIC은 모두 "역사적으로 중요한"틈새 시장에 속합니다. 그러나 나는 그 MAC CP에 다소 붙어 있기 때문에 UNIX 및 DOS-Win-OS / 2 트리와는 다른 일반 텍스트 파일로 새로운 줄을 표시하는 또 다른 변형을 만들었습니다. 내가 외운 이국적인 코너 사건이었다.
Arioch '

1
감사. 더 많은 주제별 링크 -docs.microsoft.com/en-us/windows/desktop/Intl/…-EBCDIC 는 "Windows 2000"으로 표시되어 있으므로 w2k 이전에는 존재하지 않았으며 그 이후로 아무도 귀찮게하지 않았습니다. 내가 사용한 헤더 변환 소스를 업데이트하려면 :-D
Arioch '


0

활성 코드 페이지를 리턴하는 Windows API는 GetConsoleOutputCP () 입니다.


활성화 된 OEM 코드 페이지 (ANSI 코드 페이지 아님) 및 사용 (콘솔 chcp명령) 으로 재정의 된 경우에만
Arioch '
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.