Comment puis-je déterminer manuellement le CodePage et les paramètres régionaux du système d'exploitation actuel

13

Existe-t-il un moyen pour un utilisateur de rechercher manuellement la page de codes actuelle et les paramètres régionaux de son système d'exploitation Windows? Existe-t-il un paramètre de registre qui stocke ces informations?

Il serait également utile que la technique fonctionne jusqu'à Windows 2000.

epotter
la source

Réponses:

16

chcp vous obtiendra la page de codes active.

systeminfo affichera les paramètres régionaux du système et les paramètres régionaux d'entrée, entre autres.

" Remarque : Cette commande (systeminfo) n'est pas disponible dans Windows 2000 mais vous pouvez toujours interroger un ordinateur Windows 2000 en exécutant cette commande sur un ordinateur Windows XP ou Windows 2003 et définir l'ordinateur distant sur un ordinateur Windows 2000. Si la connexion utilisateur actuelle qui l'exécute la commande a déjà des privilèges sur la machine distante (par exemple, les administrateurs de domaine), vous n'avez pas besoin d'utiliser / u et / p. "
D' ici .

Point-virgule oublié
la source
1
Sachez que chcpvous obtiendrez la page de codes OEM active . Comme l'indique mklement dans sa réponse, il existe toujours une autre page de codes active utilisée par Windows, la page de codes ANSI. Pour plus d'informations, voir la réponse de mklement .
kangalioo
6

Notez qu'un système donné a deux pages de codes actives d'intérêt , comme déterminé par le paramètre hérité nommé langue pour les programmes non Unicode , anciennement appelé paramètres régionaux du système (voir la section inférieure pour des informations générales):

  • la page de codes OEM à utiliser par les applications de console héritées ,
  • la page de codes ANSI à utiliser par les applications GUI héritées .

Remarque: Il y a deux autres pages de code, mais elles sont rarement utilisées et ne sont donc pas abordées ici: le code EBCDIC et la page de code Mac (pré-OS X) Mac - voir la documentation WinAPI .

La page de codes OEM active est plus facilement obtenue via chcp, comme indiqué dans la réponse utile de Forgotten Semicolon - en supposant qu'elle n'a pas été explicitement modifiée dans la session avec chcp <codePageNum>.

La détermination de la page de codes ANSI active n'est pas aussi simple, mais PowerShell peut vous aider, également à déterminer le nom et la langue des paramètres régionaux du système:

Sous Windows 8+ / Windows Server 2012+ : utilisez l' Get-WinSystemLocaleapplet de commande:

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

Remarque: Il peut être tentant d'utiliser [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, par exemple, mais cela ne reflète pas nécessairement la page de codes ANSI active à l' échelle du système ; il s'agit plutôt de la page de codes ANSI associée aux paramètres régionaux (culture) de l' utilisateur actuel , qui peuvent être différents.

Sur un système US-anglais, les résultats ci-dessus donnent:

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

OEMCPest la page de codes OEM, ACPla page de codes ANSI.

Une méthode basée sur le registre qui fonctionne également sur les anciens systèmes jusqu'à Windows XP :

# Get the code pages:
Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Nls\CodePage | 
     Select-Object OEMCP, ACP

Sur un système US-anglais, les résultats ci-dessus donnent:

OEMCP ACP 
----- --- 
437   1252

Si vous souhaitez également obtenir le nom et le LCID des paramètres régionaux du système (notez cependant que les LCID sont obsolètes):

[Globalization.CultureInfo]::GetCultureInfo([int] ('0x' + (
        Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Nls\Language' Default
      ).Default)
)

Sur un système US-anglais, les résultats ci-dessus donnent:

LCID             Name             DisplayName                                                                                                                                      
----             ----             -----------                                                                                                                                      
1033             en-US            English (United States)                                                                                                                          

Informations générales :

Les paramètres régionaux du système sont le nom hérité de ce qui est maintenant appelé de manière plus descriptive la langue pour les programmes non Unicode (voir la terminologie NLS ) et, comme les noms le suggèrent:

  • Le paramètre s'applique uniquement aux programmes hérités (programmes qui ne prennent pas en charge Unicode).

  • Il s'applique à l'ensemble du système , quels que soient les paramètres régionaux d'un utilisateur donné , et des privilèges administratifs sont nécessaires pour le modifier.

Il est important de noter qu'il s'agit d' un paramètre hérité , car les pages de codes ne s'appliquent plus aux programmes qui utilisent Unicode en interne et appellent les versions Unicode de l'API Windows.

Il détermine notamment les pages de codes actives , c'est-à-dire l' encodage des caractères utilisé par défaut :

  • la page de codes ANSI à utiliser lorsque des programmes non Unicode appellent les versions non Unicode (ANSI) de l'API Windows, notamment la version ANSI de la TextOutfonction de traduction des chaînes vers et depuis Unicode, qui détermine notamment la façon dont les chaînes du programme s'affichent dans le GUI .

  • la page de codes OEM à activer par défaut dans les fenêtres de la console , comme indiqué par chcp.

    • La page de codes active d'une fenêtre de console détermine la façon dont les entrées et sorties du clavier des applications de console sont interprétées et affichées .
      • Notez que cela signifie que même la sortie des applications de la console Unicode est traduite dans la page de codes active, ce qui peut entraîner une perte d'informations; l'utilisation de la pseudo page de code 65001, qui représente le codage UTF-8 d'Unicode, est une solution, mais qui peut entraîner des programmes de ligne de commande hérités à mal interpréter les données et même à échouer - voir cette réponse StackOverflow pour plus de détails.
    • Contrairement à la page de codes ANSI, vous pouvez modifier la page de codes [OEM] active à la demande pour une fenêtre de console donnée ; par exemple, pour basculer vers la page de codes OEM 850, exécuter chcp 850dans cmd.exeet $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)dans PowerShell.
  • en outre, les pages de codes EBCDIC et Mac rarement utilisées .

Malgré le mot locale utilisé dans le terme hérité et le mot langue dans le terme actuel:

  • Les seuls aspects contrôlés par le paramètre sont l' ensemble des pages de codes actives et les polices bitmap par défaut , pas également les autres éléments des paramètres régionaux (qui sont contrôlés par les paramètres régionaux au niveau de l'utilisateur).

  • Une page de code donnée est généralement partagée par de nombreux paramètres régionaux et couvre plusieurs langues; Par exemple, la page de codes largement utilisée1252 est utilisée par de nombreuses langues d'Europe occidentale, y compris l'anglais.

Cependant, lorsque vous modifiez le paramètre via le Panneau de configuration, vous choisissez le paramètre au moyen d' un paramètre régional spécifique.

Pour une liste de toutes les pages de codes Windows, voir https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers

mklement
la source
GetACP()fonction - technet.microsoft.com/en-us/dd318070 - qui est un lien intéressant, la section de remarque indique carrément que la valeur de retour de cette fonction ne représente PAS la langue d'entrée et la langue de l'interface utilisateur par défaut sélectionnées par l'utilisateur, mais quelque chose de complètement différent ...
Arioch 'The
En effet, @ Arioch'The - c'est ce que j'ai essayé de clarifier dans la section des informations d'arrière-plan: les paramètres régionaux du système (a) déterminent les pages de codes (mais pas d'autres paramètres régionaux) à l'échelle du système , (b) indépendamment de l'utilisateur donné lieu. Notez comment la page liée indique (non souligné dans l'original): "Renvoie l'identificateur de page de codes Windows ANSI (ACP) actuel pour le système d'exploitation ". Quant au remplacement potentiel d'AppLocale par un tiers: j'ai ajouté un lien vers la réponse.
mklement
1
Cette remarque / lien GetACP est, je pense, important en tant que confirmation de la "parole de Dieu" que la conversion par défaut MBCS en Unicode est destinée à être indépendante de l'utilisateur et globale du système d'exploitation, et pas seulement les détails de mise en œuvre dans certaines versions de Windows.
Arioch 'Le
1
Il est probable qu'aujourd'hui, les MAC pré-UNIX et EBCDIC appartiennent également à un créneau "seulement d'une certaine importance historique". Cependant, je suis quelque peu attaché à ce MAC CP, car ils ont réussi à créer une autre variante de marquage de nouvelles lignes dans des fichiers en texte brut, différente des arborescences UNIX et DOS-Win-OS / 2. C'était un cas d'angle exotique que j'ai mémorisé.
Arioch 'Le
1
Merci. Lien plus d'actualité - docs.microsoft.com/en-us/windows/desktop/Intl/… - et EBCDIC est marqué "Windows 2000" - donc avant w2k, il n'existait probablement pas, et pendant toutes les années depuis, personne n'a dérangé pour mettre à jour les sources de conversion des en-têtes que j'ai utilisées :-D
Arioch 'Le
1

Les paramètres régionaux sont également visibles dans msinfo32.

epotter
la source
0

L'API Windows qui renvoie la page de codes active est GetConsoleOutputCP () .

Main lente
la source
page de codes OEM active (pas de page de codes ANSI) et uniquement si elle a été remplacée par l'utilisation ( chcpcommande de la console )
Arioch 'Le