Answers:
chcp将为您提供活动代码页。
systeminfo将显示系统语言环境和输入语言环境,等等。
“ 注意:此命令(systeminfo)在Windows 2000中不可用,但是您仍然可以通过在Windows XP或Windows 2003计算机上运行此命令并将远程计算机设置为Windows 2000计算机来查询Windows 2000计算机。如果当前用户登录执行该命令该命令已经在远程计算机(例如,域管理员)上具有特权,您不必使用/ u和/ p。”
从这里。
请注意,一个给定的系统有两个感兴趣的活动代码页,这由旧设置(称为非Unicode程序的语言)决定,以前称为系统区域设置(有关背景信息,请参见底部):
注意:还有两个代码页,但是现在很少使用了,因此这里不再讨论:EBCDIC代码和(OS X之前的)Mac代码页-请参见WinAPI文档。
该活动的OEM代码页是最容易获得通过chcp
所示,被遗忘的分号的有用的答案 -假设它没有明确地与会话改变chcp <codePageNum>
。
确定活动的ANSI代码页不是那么简单,但是PowerShell可以帮助确定系统语言环境的名称和语言:
在Windows 8 + / Windows Server 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
如果您还想获取系统语言环境的[friendly] 名称和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)
背景资料:
系统语言环境是非Unicode程序的语言的旧名称(现在被描述性地称为语言)(请参阅 NLS术语),顾名思义,它是:
该设置仅适用于旧版程序(不支持Unicode的程序)。
它适用于系统范围的,而不管给定用户的语言环境设置如何,并且需要管理特权才能对其进行更改。
重要的是要注意,这是一个旧设置,因为代码页不再适用于内部使用Unicode并调用Windows API的Unicode版本的程序。
值得注意的是,它确定活动代码页,即默认使用的字符编码:
非Unicode程序调用Windows API的非Unicode(ANSI)版本时要使用的ANSI代码页,尤其是TextOut
用于将字符串与Unicode相互转换的函数的ANSI版本,这尤其决定了程序的字符串如何在 Windows中呈现。 GUI。
在OEM代码页,使活跃在默认情况下在控制台窗口中,通过反映chcp
。
65001
(代表Unicode的UTF-8编码)是一种解决方案,但可能导致旧版命令行程序误解数据甚至失败- 有关详细信息,请参见StackOverflow答案。850
,请在chcp 850
中cmd.exe
和$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
在PowerShell中运行。尽管在遗留术语中使用了语言环境一词,而在当前术语中使用了语言一词:
设置所控制的唯一方面是活动代码页和默认位图字体的集合,而不是语言环境的其他元素(由用户级语言环境设置控制)。
一个给定的代码页通常由许多语言环境共享和盖的多个语言; 例如,广泛使用的1252
代码页被许多西欧语言使用,包括英语。
但是,当您更改通过控制面板设置,你就挑设置途经一个特定的语言环境。
有关所有Windows代码页的列表,请参见https://docs.microsoft.com/zh-cn/windows/desktop/Intl/code-page-identifiers
GetACP()
函数-technet.microsoft.com/zh-cn/dd318070-这是一个有趣的链接,备注部分完全告诉此函数返回值,并不代表用户选择的默认输入语言和GUI语言,而是完全不同的内容……
chcp
将为您提供活动的OEM代码页。正如mklement在他的回答中指出的那样,Windows始终存在另一个活动代码页,即ANSI代码页。有关更多信息,请参见mklement的答案。