¿Cómo puedo determinar manualmente la página de códigos y la configuración regional del sistema operativo actual?

13

¿Hay alguna manera de que un usuario busque manualmente la página de códigos actual y la configuración regional de su sistema operativo Windows? ¿Existe una configuración de registro que almacene esa información?

También sería útil si la técnica funcionara desde Windows 2000.

epotter
fuente

Respuestas:

16

chcp te conseguirá la página de códigos activa.

systeminfo mostrará la configuración regional del sistema y la configuración regional de entrada, entre otras cosas.

" Nota : Este comando (systeminfo) no está disponible en Windows 2000, pero aún puede consultar la computadora con Windows 2000 ejecutando este comando en una computadora con Windows XP o Windows 2003 y configurando la computadora remota en la computadora con Windows 2000. Si el usuario actual inicia sesión y ejecuta esto el comando ya tiene privilegios en la máquina remota (por ejemplo, Administradores de dominio), no tiene que usar / u y / p ".
A partir de aquí .

Semicolon olvidado
fuente
1
Tenga en cuenta que chcpobtendrá la página de códigos OEM activa . Como dice mklement en su respuesta, siempre hay otra página de códigos activa en uso por Windows, la página de códigos ANSI. Para más información ver la respuesta de mklement .
kangalioo
6

Tenga en cuenta que un sistema determinado tiene dos páginas de códigos activas de interés , según lo determinado por la configuración heredada denominada idioma para los programas que no son Unicode , anteriormente conocidos como configuración regional del sistema (consulte la sección inferior para obtener información de fondo):

  • la página de códigos OEM para uso de aplicaciones de consola heredadas ,
  • la página de códigos ANSI para uso de aplicaciones GUI heredadas .

Nota: Hay dos páginas de códigos más , pero rara vez se usan más y, por lo tanto, no se analizan aquí: el código EBCDIC y la página de códigos Mac (anterior a OS X) : consulte los documentos de WinAPI .

La página de códigos OEM activa se obtiene más fácilmente a través de chcp, como se muestra en la útil respuesta de Forgotten Semicolon, suponiendo que no se cambió explícitamente en la sesión con chcp <codePageNum>.

Determinar la página de códigos ANSI activa no es tan simple, pero PowerShell puede ayudar, también con la determinación del nombre y el idioma de la configuración regional del sistema:

En Windows 8+ / Windows Server 2012+ : use el Get-WinSystemLocalecmdlet:

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

Nota: Puede ser tentador usar [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, por ejemplo, pero esto no necesariamente refleja la página de códigos ANSI activa en todo el sistema ; en cambio, es la página de códigos ANSI asociada con la configuración regional (cultura) del usuario actual , que puede ser diferente.

En un sistema inglés de EE. UU., Lo anterior produce:

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

OEMCPes la página de códigos OEM, ACPla página de códigos ANSI.

Un método basado en el registro que también funciona en sistemas más antiguos hasta Windows XP :

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

En un sistema inglés de EE. UU., Lo anterior produce:

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

Si también desea obtener el nombre [amigable] de la configuración regional del sistema y LCID (aunque tenga en cuenta que los LCID están en desuso):

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

En un sistema inglés de EE. UU., Lo anterior produce:

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

Información de fondo :

La configuración regional del sistema es el nombre heredado de lo que ahora se llama más descriptivamente lenguaje para programas que no son Unicode (consulte la terminología de NLS ) y, como sugieren los nombres:

  • La configuración solo se aplica a los programas heredados (programas que no admiten Unicode).

  • Se aplica en todo el sistema , con independencia de un determinado del usuario las opciones de localización , y se requieren privilegios administrativos para cambiarlo.

Es importante tener en cuenta que es una configuración heredada , porque las páginas de códigos ya no se aplican a los programas que usan Unicode internamente y llaman a las versiones Unicode de la API de Windows.

En particular, determina las páginas de códigos activas , es decir, la codificación de caracteres utilizada por defecto :

  • la página de códigos ANSI para usar cuando los programas que no son Unicode llaman a las versiones que no son Unicode (ANSI) de la API de Windows, en particular la versión ANSI de la TextOutfunción para traducir cadenas hacia y desde Unicode, que determina en particular cómo se procesan las cadenas del programa en el interfaz gráfica de usuario .

  • la página de códigos OEM para activarse por defecto en las ventanas de la consola , como se refleja en chcp.

    • La página de códigos activos de una ventana de consola determina cómo se interpreta y muestra la entrada y salida del teclado desde las aplicaciones de consola .
      • Tenga en cuenta que eso significa que incluso la salida de las aplicaciones de consola Unicode se traduce a la página de códigos activa, lo que puede provocar la pérdida de información; El uso de la página de pseudocódigo 65001, que representa la codificación UTF-8 de Unicode, es una solución, pero eso puede hacer que los programas de línea de comandos heredados malinterpreten los datos e incluso fallen: consulte esta respuesta de StackOverflow para obtener más detalles.
    • A diferencia de la página de códigos ANSI, se puede cambiar la página de códigos activa [OEM] en la demanda de una ventana de consola dada ; por ejemplo, para cambiar a la página de códigos OEM 850, correr chcp 850en cmd.exe, y $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)en PowerShell.
  • adicionalmente, las páginas de códigos EBCDIC y Mac raramente utilizadas .

A pesar de la palabra locale utilizada en el término heredado y el idioma de la palabra en el término actual:

  • Los únicos aspectos controlados por la configuración son el conjunto de páginas de códigos activas y las fuentes de mapa de bits predeterminadas , no también otros elementos de una configuración regional (que están controlados por la configuración regional de nivel de usuario).

  • Una página de códigos determinada generalmente es compartida por muchos entornos locales y cubre varios idiomas; por ejemplo, la página de códigos ampliamente utilizada1252 es utilizada por muchos idiomas de Europa occidental, incluido el inglés.

Sin embargo, cuando cambia la configuración a través del Panel de control, elige la configuración a través de una configuración regional específica.

Para obtener una lista de todas las páginas de códigos de Windows, consulte https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers

mklement
fuente
GetACP()función - technet.microsoft.com/en-us/dd318070 - ese es un enlace interesante, la sección de comentarios dice directamente que el valor de retorno de esta función NO representa el idioma de entrada predeterminado del usuario y el idioma GUI pero algo completamente diferente ...
Arioch 'The
De hecho, @ Arioch'The: eso es lo que intenté aclarar en la sección de información de fondo: la configuración regional del sistema (a) determina las páginas de códigos (pero no otras configuraciones de configuración regional) en todo el sistema , (b) independientemente de un usuario determinado lugar. Observe cómo dice la página vinculada (énfasis agregado): "Devuelve el identificador actual de la página de códigos ANSI (ACP) de Windows para el sistema operativo ". En cuanto al posible reemplazo de terceros de AppLocale: he agregado un enlace a la respuesta.
Mklement 05 de
1
Ese comentario / enlace de GetACP es importante como una confirmación de "palabra de Dios" de que la conversión predeterminada de MBCS a Unicode está destinada a ser independiente del usuario y global del sistema operativo, no solo los detalles de implementación en algunas de las versiones de Windows.
Arioch 'El
1
Probablemente hoy, tanto el MAC pre-UNIX como el EBCDIC pertenecen igualmente a un nicho de "solo importancia histórica". Sin embargo, estoy algo apegado a ese CP de MAC, porque lograron hacer otra variante de marcar nuevas líneas en archivos de texto sin formato, diferentes de los árboles UNIX y DOS-Win-OS / 2. Era un caso de esquina exótico que memoricé.
Arioch 'El
1
Gracias. Más enlace de actualidad - docs.microsoft.com/en-us/windows/desktop/Intl/… - y EBCDIC está marcado "Windows 2000" - así que antes de w2k probablemente no existía, y durante todos los años desde entonces nadie se molestó para actualizar las fuentes de conversión de encabezados que utilicé :-D
Arioch 'The
1

La configuración regional también se puede ver en msinfo32.

epotter
fuente
0

La API de Windows que devuelve la página de códigos activa es GetConsoleOutputCP () .

mano lenta
fuente
página de códigos OEM activa (no página de códigos ANSI) y solo si fue anulada por el uso ( chcpcomando de consola )
Arioch 'The