Come posso determinare manualmente la CodePage e le impostazioni internazionali del sistema operativo corrente


13

Esiste un modo in cui un utente può cercare manualmente la tabella codici e le impostazioni internazionali correnti del proprio sistema operativo Windows? Esiste un'impostazione di registro che memorizza tali informazioni?

Sarebbe anche utile se la tecnica funzionasse fino a Windows 2000.

Risposte:


16

chcp ti porterà alla tabella codici attiva.

systeminfo visualizzerà le impostazioni locali del sistema e le impostazioni locali di input, tra le altre cose.

" Nota : questo comando (systeminfo) non è disponibile in Windows 2000 ma è comunque possibile eseguire una query sul computer Windows 2000 eseguendo questo comando su computer Windows XP o Windows 2003 e impostare il computer remoto su computer Windows 2000. Se l'utente corrente accede che esegue questo il comando ha già il privilegio sul computer remoto (ad esempio, amministratori di dominio), non è necessario utilizzare / u e / p. "
Da qui .


1
Tieni presente che chcpotterrai la tabella codici OEM attiva . Come afferma mklement nella sua risposta, c'è sempre un'altra code page attiva in uso da Windows, la code page ANSI. Per ulteriori informazioni, consultare la risposta di mklement .
Kangalioo,

6

Si noti che un determinato sistema ha due pagine di codice attive di interesse , come determinato dall'impostazione legacy denominata lingua per i programmi non Unicode , precedentemente noto come locale di sistema (vedere la sezione inferiore per informazioni di base):

  • la tabella codici OEM utilizzata dalle applicazioni console legacy ,
  • la tabella codici ANSI per l'utilizzo da parte di applicazioni GUI legacy .

Nota: ci sono altre due code page, ma sono usate raramente e quindi non discusse qui: il codice EBCDIC e la code page (pre-OS X) per Mac - vedere i documenti WinAPI .

La tabella codici OEM attiva è facilmente ottenibile tramite chcp, come mostrato nella risposta utile di Forgotten Semicolon, supponendo che non sia stato esplicitamente modificato nella sessione con chcp <codePageNum>.

Determinare la tabella codici ANSI attiva non è così semplice, ma PowerShell può aiutare, anche nel determinare il nome e la lingua delle impostazioni internazionali del sistema:

In Windows 8+ / Windows Server 2012+ : utilizzare il Get-WinSystemLocalecmdlet:

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

Nota: Si può essere tentati di utilizzare [cultureinfo]::CurrentCulture.TextInfo.ANSICodePage, per esempio, ma questo non riflette necessariamente il livello di sistema tabella codici ANSI attiva; invece, è la codepage ANSI associata alla locale (cultura) dell'utente corrente , che può essere diversa.

Su un sistema inglese-americano, quanto sopra produce:

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

OEMCPè la tabella codici OEM, ACPla tabella codici ANSI.

Un metodo basato su registro che funziona anche su sistemi meno recenti fino a Windows XP :

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

Su un sistema inglese-americano, quanto sopra produce:

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

Se si desidera anche ottenere il nome [friendly] e il LCID della locale di sistema (si noti che gli LCID sono obsoleti):

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

Su un sistema inglese-americano, quanto sopra produce:

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

Informazioni di base :

Le impostazioni internazionali di sistema sono il nome legacy per quella che ora è più descrittivamente chiamata lingua per i programmi non Unicode (vedere la terminologia NLS ) e, come suggeriscono i nomi:

  • L' impostazione si applica solo ai programmi legacy (programmi che non supportano Unicode).

  • Si applica a tutto il sistema , indipendentemente dalle impostazioni locali di un determinato utente e per modificarlo sono richiesti privilegi di amministratore.

E 'importante notare che è sia un retaggio ambiente , perché le pagine di codice non si applicano più a programmi che utilizzano Unicode internamente e chiamano le versioni Unicode delle API di Windows.

In particolare, determina le pagine di codice attive , ovvero la codifica dei caratteri utilizzata per impostazione predefinita :

  • la tabella codici ANSI da utilizzare quando i programmi non Unicode chiamano le versioni non Unicode (ANSI) dell'API di Windows, in particolare la versione ANSI della TextOutfunzione per tradurre le stringhe da e verso Unicode, che determina in particolare il modo in cui le stringhe del programma vengono visualizzate nella GUI .

  • la tabella codici OEM da rendere attiva per impostazione predefinita nelle finestre della console , come indicato da chcp.

    • La tabella codici attiva di una finestra della console determina la modalità di interpretazione e visualizzazione dell'input e dell'output della tastiera dalle applicazioni della console .
      • Si noti che ciò significa che anche l'output delle applicazioni della console Unicode viene tradotto nella tabella codici attiva, il che può comportare la perdita di informazioni; l'uso della pseudo code page 65001, che rappresenta la codifica UTF-8 di Unicode, è una soluzione, ma che può causare programmi di riga di comando legacy per interpretare erroneamente i dati e persino fallire - vedi questa risposta StackOverflow per i dettagli.
    • A differenza della tabella codici ANSI, è possibile modificare la tabella codici [OEM] attiva su richiesta per una determinata finestra della console ; ad esempio, per passare alla pagina di codice OEM 850, correre chcp 850in cmd.exe, e $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [text.encoding]::GetEncoding(850)in PowerShell.
  • inoltre, le pagine di codice EBCDIC e Mac utilizzate raramente .

Nonostante la parola locale utilizzata nel termine legacy e la lingua delle parole nel termine corrente:

  • Gli unici aspetti controllati dall'impostazione sono il set di pagine di codice attive e i caratteri bitmap predefiniti , non anche altri elementi di una locale (che sono controllati dalle impostazioni della locale a livello di utente).

  • Una determinata tabella codici è generalmente condivisa da molte versioni locali e copre più lingue; ad esempio, la tabella 1252codici ampiamente utilizzata è utilizzata da molte lingue dell'Europa occidentale, incluso l'inglese.

Tuttavia, quando si modifica l'impostazione tramite il Pannello di controllo, si seleziona l'impostazione tramite una locale specifica.

Per un elenco di tutte le codepage di Windows, vedere https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers


GetACP()funzione - technet.microsoft.com/en-us/dd318070 - che è un collegamento interessante, la sezione delle osservazioni indica che il valore di ritorno di questa funzione NON rappresenta la lingua di input predefinita selezionata e la lingua della GUI ma qualcosa di completamente diverso ...
Arioch 'The

In effetti, @ Arioch'The - questo è quello che ho cercato di chiarire nella sezione informazioni di sfondo: la locale di sistema (a) determina le pagine di codice (ma nessuna altra impostazione di locale) a livello di sistema , (b) indipendentemente da un dato utente locale. Nota come indica la pagina collegata (enfasi aggiunta): "Restituisce l'identificatore della tabella codici ANSI (ACP) di Windows corrente per il sistema operativo ". Per quanto riguarda la potenziale sostituzione di terze parti AppLocale: ho aggiunto un link alla risposta.
mklement

1
Che GetACP osservazione / link è credo importante come "Parola di Dio" conferma che la conversione predefinita MBCS-to-Unicode è destinato per essere facile da indipendenti e OS-globale, non solo dettaglio di implementazione in alcune versioni di Windows.
Arioch "Il

1
Probabilmente oggi sia pre-UNIX MAC che EBCDIC appartengono ugualmente alla nicchia "solo di una certa importanza storica". Tuttavia, sono un po 'attaccato a quel CP MAC, perché sono riusciti a creare ancora un'altra variante di marcatura di nuove linee in file di testo semplice, diversi dagli alberi UNIX e DOS-Win-OS / 2. Era un caso d'angolo esotico che ho memorizzato.
Arioch "L'

1
Grazie. Collegamento più attuale - docs.microsoft.com/en-us/windows/desktop/Intl/… - e EBCDIC è contrassegnato con "Windows 2000" - quindi prima di w2k probabilmente non esisteva, e per tutti gli anni da allora nessuno si è disturbato per aggiornare le fonti di conversione delle intestazioni che ho usato :-D
Arioch 'L'

1

Le impostazioni internazionali possono anche essere visualizzate in msinfo32.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.