2013-01-01 6 views
52

889 charset installato di default in Windows 'cmd.exe è scarso e scostante rispetto al glorioso Unicode.Come rendere charset Unicode in cmd.exe di default?

Posso installare Unicode per impostazione predefinita o sostituire cmd.exe su un'altra console e renderlo predefinito in modo che i programmi lo utilizzino invece di cmd.exe?

Comprendo che la codifica chcp 65001 cambia solo nella console in esecuzione. Voglio cambiare charset a livello di sistema.

+2

866 è una pagina di codice per lo script cirillico. Cambiarlo è abbastanza soggetto a rompere qualsiasi vecchio programma in modalità console che si aspetta che quella pagina sia l'impostazione predefinita. Non è che non te ne accorgi, non puoi più leggere l'output del programma. –

+2

Non esiste un set di caratteri Unicode in cmd.exe. 'chcp 65001' fornisce alcune decodifiche UTF-8 ma è molto rudimentale e non fornisce input appropriati. –

risposta

38

Dopo ho provato la soluzione Algirdas', il mio Windows si è schiantato (Win 7 Pro a 64 bit) e quindi ho deciso di provare una soluzione diversa:

  1. Inizio Run (Win + R)
  2. Tipo cmd /K chcp 65001

Otterrete principalmente ciò che volete. Per avviarlo dalla barra delle applicazioni o da qualsiasi altra parte, crea un collegamento (puoi chiamarlo cmd.unicode.exe o quello che ti piace) e cambiare il suo Target in C:\Windows\System32\cmd.exe /K chcp 65001.

+0

Intendevi "cmd.unicode.bat" non "..exe", giusto? Se davvero lo faccio, come posso fare exe file win Win10? – Martin

+0

è possibile aggiungere automaticamente quel comando nel file batch? Intendo in questo modo 'START cmd/K chcp 65001 START DTRé.xls' –

+1

Con codepage 65001, la console in Windows 7 (non Windows 8+) restituisce erroneamente il numero di punti decodificati di caratteri wide per UTF-8 scritti in esso , piuttosto che il numero di byte scritti ad esso, che 'WriteFile' è * supposto * restituire. Ciò fa sì che le applicazioni riprovino scrivendo ciò che erroneamente determinano è la parte rimanente della stringa di byte, ripetutamente finché la console non restituisce che tutti i 'byte' (caratteri effettivamente decodificati) sono stati scritti. Il risultato sembra un flusso finale di caratteri garbage dopo ogni stampa che contiene caratteri non ASCII. – eryksun

6

Salva quanto segue in un file con suffisso "reg":

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe] 
"CodePage"=dword:0000fde9 

doppio clic su questo file, e regedit sarà importarlo.

Imposta in pratica la chiave HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\CodePage su 0xfde9 (65001 nel sistema decimale). file di

+4

Spiegare in dettaglio cosa significa. Come si imposta una chiave? L'OP potrebbe non essere a conoscenza di regedit. Spiega che. Spiega anche il codice fde9 (65001). Grazie. –

+2

Funziona su Windows 10 x64 –

+0

Perché non salvare in 'Console \ Prompt dei comandi'? – Chinggis6

16

Reg

Windows Registry Editor Version 5.00 
[HKEY_CURRENT_USER\Console] 
"CodePage"=dword:fde9 

Prompt dei comandi

REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9 

PowerShell

sp -t d HKCU:\Console CodePage 0xfde9 

Cygwin

regtool set /user/Console/CodePage 0xfde9 
+3

Complimenti per mostrare come impostare il valore con one-liner. Notare che tutti supportano anche l'input * decimale *, quindi è possibile utilizzare direttamente 65001. – mklement0

12

Aprire un prompt dei comandi con privilegi elevati (eseguire cmd come amministratore). interrogare il Registro di sistema disponibili i font TT alla console da:

REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" 

Vedrete un output come:

0 REG_SZ Lucida Console 
    00 REG_SZ Consolas 
    936 REG_SZ *新宋体 
    932 REG_SZ *MS ゴシック 

Ora abbiamo bisogno di aggiungere un carattere TT che supporta i caratteri che servono come Courier New, lo facciamo con l'aggiunta di zeri per il nome della stringa, quindi in questo caso il prossimo sarebbe "000":

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New" 

Ora implementiamo supporto UTF-8:

REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f 

carattere Set di default "Courier New":

REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f 

Imposta la dimensione del carattere a 20:

REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f 

abilitare la modifica veloce se vi piace:

REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f 
+0

Meno 1: UTF-8 è solo parzialmente supportato nelle finestre della console e solo per l'output. –

+0

Questa è una risposta diretta alla domanda OP: "Come rendere charset Unicode in cmd.exe di default?", Con tutti i passaggi il più chiari possibile, come già spiegato da Alastair McCormack: "Non esiste nulla come il charset Unicode in cmd.exe. chcp 65001 fornisce alcune decodifiche UTF-8 ma è molto rudimentale e non fornisce input appropriati. " Quindi non vedo la necessità di spiegare i pro ei contro della risposta data. –

+0

In realtà l'output della prima 'req query' mi mostra solo sqares sulle righe 3 e 4 – realtebo