Назад | Перейти на главную страницу

Как я могу вручную определить CodePage и Locale текущей ОС

Есть ли способ вручную заставить пользователя искать текущую кодовую страницу и языковой стандарт своей ОС Windows? Есть ли параметр реестра, в котором хранится эта информация?

Также было бы полезно, если бы эта техника работала вплоть до Windows 2000.

chcp даст вам активную кодовую страницу.

системная информация среди прочего отобразит языковой стандарт системы и языковой стандарт ввода.

"Заметка: Эта команда (systeminfo) недоступна в Windows 2000, но вы все равно можете запросить компьютер с Windows 2000, выполнив эту команду на компьютере с Windows XP или Windows 2003 и настроив удаленный компьютер на компьютер с Windows 2000. Если текущий пользователь, выполняющий эту команду, уже имеет права на удаленном компьютере (например, администраторы домена), вам не нужно использовать / u и / p.
Из Вот.

Обратите внимание, что данная система имеет два активные кодовые страницы, представляющие интерес, как определено устаревшей настройкой с именем язык для программ, не поддерживающих Unicode, ранее известный как языковой стандарт системы (справочную информацию см. в нижнем разделе):

  • в OEM кодовая страница для использования устаревшими приставка Приложения,
  • в ANSI кодовая страница для использования устаревшими GUI Приложения.

Примечание: есть еще два кодовые страницы, но они сейчас используются редко и поэтому здесь не обсуждаются: EBCDIC код и (до OS X) Mac кодовая страница - см. документы WinAPI.

В активная кодовая страница OEM проще всего получить через chcp, как показано в Полезный ответ о забытой точке с запятой - предполагая, что он не был явно изменен в сеансе с chcp <codePageNum>.

Определение активная кодовая страница ANSI не так просто, но PowerShell может помочь, а также с определением имя и язык языкового стандарта системы:

В Windows 8+ / Windows Server 2012+: Использовать Get-WinSystemLocale командлет:

Get-WinSystemLocale | Select-Object Name, DisplayName, 
                        @{ n='OEMCP'; e={ $_.TextInfo.OemCodePage } }, 
                        @{ n='ACP';   e={ $_.TextInfo.AnsiCodePage } }

Примечание: может возникнуть соблазн использовать [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, например, но это не обязательно отражают общесистемный активная кодовая страница ANSI; вместо этого это кодовая страница ANSI, связанная с текущий пользователь locale (культура), которая может отличаться.

В американской-английской системе приведенное выше дает:

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)                                                                                                                          

Исходная информация:

Системный языковой стандарт это унаследованное имя для того, что теперь более описательно называется язык для программ, не поддерживающих Unicode (видеть Терминология NLS), и, как следует из названия:

  • В настройка применяется только к устаревшие программы (программы, не поддерживающие Unicode).

  • Это применяется общесистемный, независимо от данного пользователь настройки локали, и для его изменения требуются права администратора.

Важно отметить, что это а наследие установка, так как кодовые страницы больше не применяются к программам, использующим Unicode внутренне и вызовите версии Unicode Windows API.

Примечательно, что это определяет активные кодовые страницы, т.е. кодировка символов используется по умолчанию:

  • в Кодовая страница ANSI для использования, когда программы, не поддерживающие Unicode, вызывают версии API Windows, не поддерживающие Unicode (ANSI), в частности, версию ANSI TextOut функция для перевода строк в Unicode и обратно, что особенно важно определяет, как строки программы отображаются в графическом интерфейсе.

  • в Кодовая страница OEM сделать активным по умолчанию в окна консоли, как это отражено chcp.

    • Активная кодовая страница окна консоли определяет, как ввод с клавиатуры и вывод из консольные приложения интерпретируется и отображается.
      • Обратите внимание: это означает, что даже вывод из Unicode консольные приложения транслируются в активную кодовую страницу, что может привести к потере информации; использование псевдокодовой страницы 65001, который представляет собой кодировку Unicode UTF-8, является решением, но это может вызвать наследие программы командной строки для неправильного толкования данных и даже отказа - см. этот ответ StackOverflow для подробностей.
    • В отличие от кодовой страницы ANSI, ты жестяная банка изменить активную кодовую страницу [OEM] по запросу для данного окна консоли; например, для перехода на кодовую страницу OEM 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

Локаль также можно увидеть в msinfo32.

API Windows, который возвращает активную кодовую страницу, GetConsoleOutputCP ().