Есть ли способ вручную заставить пользователя искать текущую кодовую страницу и языковой стандарт своей ОС Windows? Есть ли параметр реестра, в котором хранится эта информация?
Также было бы полезно, если бы эта техника работала вплоть до Windows 2000.
chcp даст вам активную кодовую страницу.
системная информация среди прочего отобразит языковой стандарт системы и языковой стандарт ввода.
"Заметка: Эта команда (systeminfo) недоступна в Windows 2000, но вы все равно можете запросить компьютер с Windows 2000, выполнив эту команду на компьютере с Windows XP или Windows 2003 и настроив удаленный компьютер на компьютер с Windows 2000. Если текущий пользователь, выполняющий эту команду, уже имеет права на удаленном компьютере (например, администраторы домена), вам не нужно использовать / u и / p.
Из Вот.
Обратите внимание, что данная система имеет два активные кодовые страницы, представляющие интерес, как определено устаревшей настройкой с именем язык для программ, не поддерживающих Unicode, ранее известный как языковой стандарт системы (справочную информацию см. в нижнем разделе):
Примечание: есть еще два кодовые страницы, но они сейчас используются редко и поэтому здесь не обсуждаются: 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
.
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/en-us/windows/desktop/Intl/code-page-identifiers
Локаль также можно увидеть в msinfo32.
API Windows, который возвращает активную кодовую страницу, GetConsoleOutputCP ().