epo*_*ter 19 windows windows-2000
有没有办法手动让用户查找其 Windows 操作系统的当前代码页和区域设置?是否有存储该信息的注册表设置?
如果该技术可以一直使用到 Windows 2000,那也会很有用。
For*_*lon 18
chcp将为您提供活动代码页。
systeminfo将显示系统区域设置和输入区域设置等。
"注意:此命令(systeminfo) 在Windows 2000 中不可用,但您仍然可以通过在Windows XP 或Windows 2003 计算机上运行此命令来查询Windows 2000 计算机并将远程计算机设置为Windows 2000 计算机。如果执行此命令的当前用户登录命令已经在远程机器上拥有特权(例如,域管理员),您不必使用 /u 和 /p。”
从这里开始。
mkl*_*ent 14
请注意,给定的系统有两个感兴趣的活动代码页,由名为非 Unicode 程序的语言的旧设置决定,以前称为系统区域设置(背景信息请参阅底部部分):
注意:还有两个代码页,但它们不再使用,因此不在此处讨论:EBCDIC代码和(OS X 之前的)Mac代码页 - 请参阅WinAPI 文档。
该活动的OEM代码页是最容易获得通过chcp所示,被遗忘的分号的有用的答案-假设控制台窗口通过注册表和代码页是不符合会议明确更改没有配置一个自定义代码页chcp <codePageNum>。
确定活动的 ANSI 代码页并不那么简单,但PowerShell可以提供帮助,还可以确定系统区域设置的名称和语言:
在Windows 8+ / Windows Server 2012+ 中:使用Get-WinSystemLocalecmdlet:
Get-WinSystemLocale | Select-Object Name, DisplayName,
@{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } },
@{ n='ACP'; e={ $_.TextInfo.AnsiCodePage } }
Run Code Online (Sandbox Code Playgroud)
警告:返回的信息并不能反映潜在的UTF-8覆盖,可能通过一个新的Windows 10功能到位(见本SO答案); 相反,该信息始终反映最初与活动系统区域设置相关联的代码页。如果您确实需要知道 UTF-8 覆盖是否有效,请参阅下面基于注册表的方法。
在美英系统上,上述结果为:
Name DisplayName OEMCP ACP
---- ----------- ----- ---
en-US English (United States) 437 1252
Run Code Online (Sandbox Code Playgroud)
OEMCP是 OEM 代码页,ACPANSI 代码页。
一种基于注册表的方法,也适用于Windows XP 的旧系统:
# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage |
Select-Object OEMCP, ACP
Run Code Online (Sandbox Code Playgroud)
在美英系统上,上述结果为:
OEMCP ACP
----- ---
437 1252
Run Code Online (Sandbox Code Playgroud)
如果您还想获取系统语言环境的 [友好]名称和 LCID(但请注意,不推荐使用 LCID):
[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
).Default)
)
Run Code Online (Sandbox Code Playgroud)
在美英系统上,上述结果为:
LCID Name DisplayName
---- ---- -----------
1033 en-US English (United States)
Run Code Online (Sandbox Code Playgroud)
背景资料:
系统区域设置是现在更描述性地称为非 Unicode 程序语言的旧名称(请参阅NLS 术语),正如名称所暗示的那样:
该设置仅适用于旧程序(不支持 Unicode 的程序)。
无论给定用户的区域设置如何,它都适用于系统范围,并且需要管理权限才能更改它。
需要注意的是,这是一个遗留设置,因为代码页不再适用于在内部使用 Unicode并调用 Windows API 的 Unicode 版本的程序。
值得注意的是,它确定了活动代码页,即默认使用的字符编码:
当非 Unicode 程序调用非 Unicode (ANSI) 版本的 Windows API 时要使用的ANSI 代码页,特别是TextOut用于将字符串与 Unicode 相互转换的函数的 ANSI 版本,它特别决定了程序的字符串在图形用户界面。
默认情况下在控制台窗口中激活的OEM 代码页,如.chcp
65001(代表 Unicode 的 UTF-8 编码)是一种解决方案,但这会导致遗留命令行程序误解数据甚至失败 -有关详细信息,请参阅此 StackOverflow 答案。850,运行chcp 850中cmd.exe,并$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)在PowerShell中。此外,很少使用的EBCDIC和Mac代码页。
尽管在旧术语中使用了语言环境这个词,而在当前术语中使用了语言这个词:
该设置控制的唯一方面是活动代码页集和默认位图字体,而不是区域设置的其他元素(由用户级区域设置控制)。
一个给定的代码页通常由许多语言环境共享和盖的多个语言; 例如,广泛使用的1252代码页被许多西欧语言使用,包括英语。
但是,当您通过控制面板更改设置时,您确实通过特定区域设置来选择设置。
有关所有 Windows 代码页的列表,请参阅https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers