AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 80635
Accepted
epotter
epotter
Asked: 2009-11-03 10:50:46 +0800 CST2009-11-03 10:50:46 +0800 CST 2009-11-03 10:50:46 +0800 CST

如何手动确定当前操作系统的 CodePage 和 Locale

  • 772

有没有一种方法可以让用户手动查找其 Windows 操作系统的当前代码页和语言环境?是否有存储该信息的注册表设置?

如果该技术可以一直使用到 Windows 2000,它也会很有用。

windows
  • 4 4 个回答
  • 54017 Views

4 个回答

  • Voted
  1. Best Answer
    Forgotten Semicolon
    2009-11-03T10:56:21+08:002009-11-03T10:56:21+08:00

    chcp将为您提供活动代码页。

    systeminfo将显示系统区域设置和输入区域设置等。

    "注意:此命令(systeminfo)在 Windows 2000 中不可用,但您仍然可以通过在 Windows XP 或 Windows 2003 计算机上运行此命令来查询 Windows 2000 计算机,并将远程计算机设置为 Windows 2000 计算机。如果当前用户登录执行此命令已经拥有远程机器的权限(例如,域管理员),您不必使用 /u 和 /p。”
    从这里。

    • 20
  2. mklement
    2017-03-04T20:34:52+08:002017-03-04T20:34:52+08:00

    请注意,给定系统有两个感兴趣的活动代码页,由名为非 Unicode 程序语言的旧设置确定,以前称为系统区域设置(有关背景信息,请参阅底部部分):

    • 供旧版控制台应用程序使用的OEM代码页,
    • 旧版GUI应用程序使用的ANSI代码页。

    注意:还有另外两个代码页,但它们已很少使用,因此这里不讨论:EBCDIC代码和(OS X 之前的)Mac代码页 - 请参阅WinAPI 文档。

    活动的OEM 代码页最容易通过.chcpchcp <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 } }
    

    警告:返回的信息不反映可能通过新的 Windows 10 功能实现的潜在 UTF-8覆盖(请参阅此 SO 答案);相反,该信息始终反映最初与活动系统区域设置关联的代码页。如果您确实需要知道 UTF-8 覆盖是否生效,请参阅下面基于注册表的方法。

    在美英系统上,上述产生:

    Name  DisplayName             OEMCP  ACP
    ----  -----------             -----  ---
    en-US English (United States)   437 1252
    

    OEMCP是 OEM 代码页,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)                                                                                                                          
    

    背景资料:

    系统语言环境是现在更具描述性地称为非 Unicode 程序语言的旧名称(请参阅NLS 术语),正如名称所示:

    • 该设置仅适用于旧程序(不支持 Unicode 的程序)。

    • 它适用于系统范围,与给定用户的区域设置无关,并且需要管理权限才能更改它。

    需要注意的是,这是一个遗留设置,因为代码页不再适用于在内部使用 Unicode 并调用 Unicode 版本的 Windows API 的程序。

    值得注意的是,它决定了活动代码页,即默认使用的字符编码:

    • 当非 Unicode 程序调用 Windows API 的非 Unicode (ANSI) 版本时使用的ANSI 代码页TextOut,特别是用于将字符串转换为 Unicode 和从 Unicode 转换的函数的 ANSI 版本,它特别决定了程序的字符串在图形用户界面。

      • 使用标准功能,您无法按需更改此代码页,因此您无法使用不同的 ANSI 代码页选择性地运行非 Unicode 程序。
      • Arioch '指向旧版 Microsoft 程序AppLocale的要点,即Windows 7 可用于根据需要运行具有可选系统区域设置的单个程序;但是,它似乎不再可供下载,并且似乎不再适用于 Windows 10。
      • Locale Emulator是一个开源的第三方解决方案,似乎在 AppLocale 停止的地方(我没有尝试过),并且支持 Windows 10 上的 32 位应用程序。
    • 在控制台窗口中默认激活的OEM 代码页,如.chcp

      • 控制台窗口的活动代码页决定了如何解释和显示来自控制台应用程序的键盘输入和输出。
        • 请注意,这意味着即使来自Unicode控制台应用程序的输出也会被转换为活动代码页,这可能会导致信息丢失;使用代表 Unicode 的 UTF-8 编码的 pseudo code page65001是一种解决方案,但这可能会导致遗留命令行程序误解数据甚至失败 - 有关详细信息,请参阅此 StackOverflow 答案。
      • 与 ANSI 代码页不同,您可以根据需要更改给定控制台窗口的活动 [OEM] 代码页;例如,切换到 OEM 代码页,在PowerShell 中850运行。chcp 850cmd.exe$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)
    • 此外,很少使用的EBCDIC和Mac代码页。

    尽管旧术语中使用了语言环境一词,而当前术语中使用了语言一词:

    • 该设置控制的唯一方面是活动代码页集和默认位图字体,而不是区域设置的其他元素(由用户级区域设置控制)。

    • 给定的代码页通常由许多语言环境共享并涵盖多种语言;例如,广泛使用的1252代码页被许多西欧语言使用,包括英语。

    但是,当您通过控制面板更改设置时,您确实会通过特定区域设置来选择设置。

    有关所有 Windows 代码页的列表,请参阅https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers

    • 20
  3. epotter
    2009-11-03T12:01:51+08:002009-11-03T12:01:51+08:00

    区域设置也可以在 msinfo32 中看到。

    • 2
  4. slowhand
    2016-12-23T15:26:58+08:002016-12-23T15:26:58+08:00

    返回活动代码页的 Windows API 是GetConsoleOutputCP()。

    • 0

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 如何在笔记本电脑上使用 Tobit David?[关闭]

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve