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

У Вас есть IDS (Система обнаружения проникновения)?

11
задан 2 November 2009 в 20:50
4 ответа

chcp получит Вас активная кодовая страница.

systeminfo отобразит системную локаль и введет локаль, среди прочего.

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

14
ответ дан 2 December 2019 в 21:47

Локаль может также быть замечена в msinfo32.

1
ответ дан 2 December 2019 в 21:47

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

0
ответ дан 2 December 2019 в 21:47

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

  • кодовая страница OEM для использования устаревшей консолью приложений,
  • кодовая страница ANSI для использования устаревшими приложениями с графическим интерфейсом .

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

Активную кодовую страницу OEM проще всего получить с помощью chcp , как показано в полезном ответе Forgotten Semicolon - при условии, что она не была явно изменена в сеансе с chcp .

Определить активную кодовую страницу 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, связанная с локалью (культурой) текущего пользователя , которая может отличаться.

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

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).

  • It [116792 1] применяет в масштабе всей системы , независимо от настроек локали данного пользователя , и для его изменения требуются права администратора.

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

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

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

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

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

5
ответ дан 2 December 2019 в 21:47

Теги

Похожие вопросы