Come usare i caratteri unicode nella riga di comando di Windows?


317

Abbiamo un progetto in Team Foundation Server (TFS) che contiene un carattere non inglese (š). Quando abbiamo provato a scrivere alcune cose relative alla build ci siamo imbattuti in un problema: non possiamo passare lettera š agli strumenti da riga di comando. Il prompt dei comandi o quant'altro lo rovina e l' utilità tf.exe non riesce a trovare il progetto specificato.

Ho provato diversi formati per il file .bat (ANSI, UTF-8 con e senza BOM ) e lo scripting in JavaScript (che è intrinsecamente Unicode) - ma senza fortuna. Come eseguire un programma e passargli una riga di comando Unicode ?


1
@JohannesDewender - Copia-incolla è andato storto?
Vilx

2
Python 3.6: "la console predefinita su Windows accetta tutti i caratteri Unicode con quella versione" (beh, la maggior parte per me) MA è necessario configurare la console: fare clic destro sulla parte superiore delle finestre (del cmd o del pitone IDLE ), in default / font scegli la "console Lucida".
JinSnow


Possibile duplicato di Come
generare

2
@ LưuVĩnhPhúc - No, si tratta di passare argomenti della riga di comando unicode, piuttosto che visualizzare il testo nella console. La console potrebbe non essere coinvolta affatto.
Vilx-

Risposte:


68

Il mio background: Uso l'input / output Unicode in una console per anni (e lo faccio molto quotidianamente. Inoltre, sviluppo strumenti di supporto proprio per questo compito). Ci sono pochissimi problemi, per quanto riguarda i seguenti fatti / limitazioni:

  • CMDe "console" sono fattori non correlati. CMD.exeè solo uno dei programmi che sono pronti a "lavorare all'interno" di una console ("applicazioni console").
  • AFAIK, CMDha un supporto perfetto per Unicode; puoi inserire / generare tutti i caratteri Unicode quando è attiva una tabella codici.
  • La console di Windows ha MOLTO supporto per Unicode, ma non è perfetta (solo "abbastanza buona"; vedi sotto).
  • chcp 65001è molto pericoloso. A meno che un programma non sia stato appositamente progettato per aggirare i difetti nell'API di Windows (o utilizzare una libreria di runtime C che presenta queste soluzioni alternative), non funzionerebbe in modo affidabile. Win8 risolve ½ di questi problemi con cp65001, ma il resto è ancora applicabile a Win10 .
  • Ci lavoro cp1252. Come ho già detto: per inserire / emettere Unicode in una console, non è necessario impostare la tabella codici .

I dettagli

  • Per leggere / scrivere Unicode su una console, un'applicazione (o la sua libreria di runtime C) dovrebbe essere abbastanza intelligente da utilizzare non File-I/OAPI, ma Console-I/OAPI. (Per un esempio, vedi come lo fa Python .)
  • Allo stesso modo, per leggere gli argomenti della riga di comando Unicode, un'applicazione (o la sua libreria di runtime C) dovrebbe essere abbastanza intelligente da utilizzare l'API corrispondente.
  • Il rendering dei caratteri della console supporta solo caratteri Unicode in BMP (in altre parole: sotto U+10000). È supportato solo il rendering di testo semplice (quindi le lingue europee - e alcune dell'Asia orientale - dovrebbero funzionare bene - nella misura in cui si utilizzano moduli precomposti). [C'è una piccola stampa fine qui per l'Asia orientale e per i personaggi U + 0000, U + 0001, U + 30FB.]

Considerazioni pratiche

  • Le impostazioni predefinite su Window non sono molto utili. Per la migliore esperienza, si dovrebbero mettere a punto 3 pezzi di configurazione:

    • Per l'output: un carattere di console completo. Per i migliori risultati, consiglio le mie build . (Le istruzioni di installazione sono presenti lì - ed elencate anche in altre risposte in questa pagina.)
    • Per l'input: un layout di tastiera capace. Per i migliori risultati, raccomando i miei layout .
    • Per input: consenti input HEX di Unicode .
  • Un altro gotcha con "Incolla" in un'applicazione console (molto tecnica):

    • L'input HEX fornisce un carattere KeyUpdi Alt; tutti gli altri modi per consegnare un personaggio accadono KeyDown; così tante applicazioni non sono pronte per vedere un personaggio KeyUp. (Applicabile solo alle applicazioni che utilizzano l' Console-I/OAPI.)
    • Conclusione: molte applicazioni non reagirebbero agli eventi di input HEX.
    • Inoltre, ciò che accade con un carattere "incollato" dipende dal layout di tastiera corrente: se il carattere può essere digitato senza usare i tasti prefisso (ma con una combinazione complicata arbitraria di modificatori, come in Ctrl-Alt-AltGr-Kana-Shift-Gray*), viene consegnato su un tasto premuto emulato. Questo è ciò che si aspetta qualsiasi applicazione, quindi incollare tutto ciò che contiene solo tali caratteri va bene.
    • Tuttavia, gli "altri" caratteri vengono trasmessi emulando l'input HEX .

    Conclusione : meno che la tastiera supporti di layout di ingresso di un sacco di personaggi senza chiavi prefisso, alcune applicazioni buggy può saltare caratteri quando siPastetramite l'interfaccia utente della console:Alt-Space E P. ( Questo è il motivo per cui consiglio di usare i layout della mia tastiera!)

Bisogna anche tenere presente che le "console alternative" più capaci "per Windows non sono affatto console . Non supportano le Console-I/OAPI, quindi i programmi che si basano su queste API per funzionare non funzionerebbero. (I programmi che usano solo "API File-I / O per i filehandle della console" funzionerebbero comunque).

Un esempio di tale non-console è una parte di MicroSoft Powershell. Io non lo uso; per sperimentare, premere e rilasciare WinKey, quindi digitare powershell.


(D'altra parte, ci sono programmi come ConEmuo ANSICONche cercano di fare di più: "tentano" di intercettareConsole-I/O API per far funzionare anche le "vere applicazioni console". Questo funziona sicuramente per programmi di esempio giocattolo; nella vita reale, questo può o potrebbe non risolvere i tuoi problemi particolari. Esperimento.)

Sommario

  • imposta font, layout tastiera (e, facoltativamente, consenti input HEX).

  • usa solo programmi che passano attraverso le Console-I/OAPI e accetta gli argomenti della riga di comando Unicode. Ad esempio, qualsiasi cygwinprogramma compilato dovrebbe andare bene. Come ho già detto, CMDva bene anche.

UPD: Inizialmente, per un bug cp65001, stavo mescolando i livelli Kernel e CRTL ( UPD²: e API in modalità utente di Windows!). Inoltre: Win8 corregge metà di questo bug; Ho chiarito la sezione sull'applicazione "console migliore" e ho aggiunto un riferimento a come Python lo fa.


OK, per qualcosa di così approfondito, meriti di essere la risposta accettata! Eccezionale!
Vilx-

5
Sono un novizio di C ++ e non riesco a capire questa risposta dopo aver letto attentamente. Qualcuno può aiutarmi su questo o fare una spiegazione più semplice?
Rick,

@Bachi Grazie a Bachi, ho scoperto che alla v73 del mio layout di tastiera (menzionato sopra) mancavano alcuni file di supporto. Ora risolto! (A giudicare dai miei .logfile, si tratta di un bug intermittente in zip -ru[?!]. Non ho idea di come eseguire il debug - o evitare in futuro ...)
Ilya Zakharevich,

@Rick: giusto! Ho aggiunto un collegamento a una soluzione alternativa in Python (ma non riesco a trovare un collegamento diretto alla patch in questo momento ...).
Ilya Zakharevich,

@IlyaZakharevich: D Grazie. Ma in qualche modo mi arrendo usando unicode su Windows. Userò Linux in un secondo momento.
Rick,

387

Provare:

chcp 65001

che cambierà la tabella codici in UTF-8. Inoltre, è necessario utilizzare i caratteri della console Lucida.


18
Sai se c'è un modo per renderlo predefinito?
AnnanFay,

82
Nota che ci sono gravi bug di implementazione nel supporto della code page 65001 di Windows che interromperà molte applicazioni che si basano sui metodi IO della libreria standard C, quindi questo è molto fragile. (Anche i file batch smettono di funzionare nel 65001.) Sfortunatamente UTF-8 è un cittadino di seconda classe in Windows.
bobince,

7
@bobince Hai un esempio di bug nel supporto della tabella codici 65001 di Windows? Sono curioso perché non ne ho mai incontrato uno, e anche googling non ha rivelato nulla. (I file batch smettono di funzionare, ovviamente, ma UTF-8 non è quasi un cittadino di seconda classe ...)
Roman Starkov,

17
@romkyns: La mia comprensione è che le chiamate che restituiscono un numero di byte (come fread / fwrite / etc) in realtà restituiscono un numero di caratteri. Ciò provoca un'ampia varietà di sintomi, come la lettura di input incompleta, il blocco di fflush, i file batch rotti e così via. Qualche sfondo. Le tabelle di codici predefinite utilizzate per le versioni locali "multibyte" di CJK hanno una gestione speciale integrata per risolvere questo problema, ma 65001 no - non è supportato .
bobince

7
Domanda interessante qui - è il bug perché dovrebbe riportare byte e invece riporta caratteri - o perché le applicazioni che lo usano hanno assunto byte = caratteri in modo errato? In altre parole, si tratta di un errore API o di un utilizzo dell'API fallito?
Base

36

Ho avuto lo stesso problema (vengo dalla Repubblica Ceca). Ho un'installazione inglese di Windows e devo lavorare con i file su un'unità condivisa. I percorsi dei file includono caratteri specifici della Repubblica ceca.

La soluzione che funziona per me è:

Nel file batch, modificare la pagina del set di caratteri

Il mio file batch:

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

Il file batch deve essere salvato nel CP 1250.

Nota che la console non mostrerà correttamente i personaggi, ma li capirà ...


1
Saluti! Ne avevo bisogno per poter inserire il carattere del copyright all'interno del mio file batch.
Lea Hayes,

Questo ha funzionato perfettamente anche per me in una situazione quasi identica alla tua. Invece il mio percorso contiene caratteri gaelico irlandese cioè á, é, í, ó, e ú.
Seany84,

@vanna che risolve i miei "caratteri e spazi turchi nel percorso sul problema di rete". Sei grande.
caglaror,


2
Probabilmente hai solo bisogno di usare caratteri diversi per visualizzare correttamente anche i personaggi, Lucida Console ha funzionato per me.
Vlastimil Ovčáčík,

29

Controlla la lingua per i programmi non Unicode. In caso di problemi con il russo nella console di Windows, è necessario impostare il russo qui:

Modifica della lingua per i programmi non Unicode


6
Ciò non abilita il supporto per Unicode in cmd, cambia solo la tabella codici predefinita in cp866cui è ancora un set di caratteri a 8 bit. Usa anche al cp866posto del cp1251quale aggiunge il suo shitload di problemi.
ivan_pozdeev,

1
Vedi anche la risposta di seguito per una nuova opzione nelle versioni più recenti di Windows 10
zvi,

14

È abbastanza difficile cambiare la tabella codici predefinita della console di Windows. Quando cerchi nel web trovi diverse proposte, tuttavia alcune di esse potrebbero interrompere completamente il tuo Windows, ovvero il tuo PC non si avvia più.

La soluzione più sicura è questa: vai alla tua chiave di registro HKEY_CURRENT_USER\Software\Microsoft\Command Processore aggiungi String value Autorun= chcp 65001.

Oppure puoi usare questo piccolo Batch-Script per le code page più comuni.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

Usando @chcp 65001>nulinvece di chcp 65001sopprimere l'output "Pagina codice attiva: 65001" si otterrà ogni volta che si avvia una nuova finestra della riga di comando.

Un elenco completo di tutti i numeri disponibili che è possibile ottenere dagli identificativi della tabella codici

Nota, le impostazioni si applicheranno solo per l'utente corrente. Se ti piace impostarlo per tutti gli utenti, sostituisci la riga SET ROOT_KEY="HKEY_CURRENT_USER"conSET ROOT_KEY="HKEY_LOCAL_MACHINE"


bella idea ed esempio utile anche!

13

In realtà, il trucco è che il prompt dei comandi comprende effettivamente questi caratteri non inglesi, ma non li può visualizzare correttamente.

Quando inserisco un percorso nel prompt dei comandi che contiene alcuni caratteri non inglesi, viene visualizzato come "?? ?????? ?????". Quando invii il tuo comando (cd "??? ?????? ?????" nel mio caso), tutto funziona come previsto.


2
Questo è probabilmente un po 'pericoloso perché potresti avere un conflitto di nomi. ad esempio, se hai due file che sono entrambi rendering "???" e inserisci "cd ???" non saprebbe quale usare (o peggio ne sceglierebbe uno arbitrario).
John,

26
Non inserisci ???, inserisci il vero nome viene visualizzato come ???. Pensalo come una casella di immissione della password. Tutto ciò che inserisci viene visualizzato come ***, ma inviato è il testo originale.
Utente

Questo ha effettivamente funzionato per i comandi eseguiti direttamente nel prompt dei comandi. Tuttavia, con l'esecuzione di un .cmdfile batch, ho ancora bisogno di mettere chcp 65001in cima al file batch.
Wisbucky,

Nel tuo caso, si tratta di un problema con i caratteri ... il contenuto è lì, solo nessun carattere appropriato per visualizzarlo. Ma OP è diverso.
WesternGun

11

Su una macchina x64 di Windows 10, il prompt dei comandi visualizzava caratteri non inglesi mediante:

Aprire un prompt dei comandi con privilegi elevati (eseguire CMD.EXE come amministratore). Richiedere alla console i caratteri TrueType disponibili sulla console tramite:

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

Vedrai un output come:

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

Ora dobbiamo aggiungere un carattere TrueType che supporti i caratteri necessari come Courier New. Facciamo questo aggiungendo zeri al 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 il supporto UTF-8:

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

Imposta il carattere predefinito su "Courier New":

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

Imposta la dimensione del carattere su 20:

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

Abilita la modifica rapida se ti piace:

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

3
In generale, l'utilizzo della tabella codici 65001 funzionerà senza errori in Windows 10 con l'aggiornamento Creators. In Windows 7 avrà sia bug di output che di input. In Windows 8 e versioni precedenti di Windows 10 ha solo il bug di input, che limita l'input a ASCII a 7 bit.
Eryk Sun,

6

Poiché non ho visto alcuna risposta completa per Python 2.7, illustrerò i due passaggi importanti e un passaggio facoltativo che è abbastanza utile.

  1. È necessario un carattere con supporto Unicode. Windows viene fornito con Lucida Console che può essere selezionato facendo clic con il pulsante destro del mouse sulla barra del titolo del prompt dei comandi e facendo clic Defaultssull'opzione. Questo dà anche accesso ai colori. Nota che puoi anche modificare le impostazioni per le finestre di comando invocate in determinati modi (ad esempio, apri qui, Visual Studio) scegliendo Propertiesinvece.
  2. È necessario impostare la tabella codici su cp65001, che sembra essere il tentativo di Microsoft di offrire il supporto UTF-7 e UTF-8 al prompt dei comandi. Fallo eseguendo chcp 65001nel prompt dei comandi . Una volta impostato, rimane così fino alla chiusura della finestra. Dovrai rifarlo ogni volta che avvii cmd.exe.

Per una soluzione più permanente, fare riferimento a questa risposta su Super User. In breve, creare una REG_SZvoce (String) usando regedit at HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processore denominarla AutoRun. Cambia il suo valore in chcp 65001. Se non si desidera visualizzare il messaggio di output dal comando, utilizzare @chcp 65001>nulinvece.

Alcuni programmi hanno difficoltà a interagire con questa codifica, essendo MinGW notevole che fallisce durante la compilazione di un messaggio di errore senza senso. Tuttavia, funziona molto bene e non causa bug con la maggior parte dei programmi.


5

Ho trovato questo metodo utile nelle nuove versioni di Windows 10:

Attiva questa funzione: "Beta: utilizza Unicode UTF-8 per il supporto linguistico in tutto il mondo"

Pannello di controllo -> Impostazioni internazionali -> scheda Amministrazione-> Cambia impostazioni locali del sistema ...

Impostazioni della regione


Come raggiungere questo obiettivo usando PowerShell o cmd?
Corey,

Sto cercando di visualizzare i caratteri cinesi nella console e farlo non ha funzionato su Windows 10 a 64 bit (installato in turco e successivamente modificato in inglese). Successivamente, proverò a installare la lingua cinese e vedere se funziona.
akinuri,

4

Un'opzione davvero semplice è installare una shell bash di Windows come MinGW e usare quella:

Inserisci qui la descrizione dell'immagine

C'è un po 'di una curva di apprendimento in quanto sarà necessario utilizzare la funzionalità della riga di comando di Unix, ma ne apprezzerai la potenza e puoi impostare il set di caratteri della console su UTF-8.

Inserisci qui la descrizione dell'immagine

Naturalmente ottieni anche tutti i soliti gadget * nix come grep, find, less, ecc.


In questo (vecchio) caso, il problema riguardava uno script anziché una console. Usando gli script bash lo risolverebbe?
Vilx-

Sì, in effetti i loro script di legno bash possono essere contrassegnati come UTF-8 e funzionano solo con molta più potenza dei file batch di Windows - so che era un vecchio caso, ma pensavo che valesse la pena contrassegnare l'opzione per riferimento futuro poiché MS non sembra stare molto meglio su Unicode.
Steve Barnes,


L'output dei caratteri codificati UTF-8 va bene. Ma l'input è ancora codificato dalla tabella codici di sistema.
Rick,

1
Solo per aggiungere che gli utenti Windows potrebbero già avere una shell bash se si utilizza Git: basta aprire una finestra Git> Git Bash .
skomisa,

3

Per un problema simile, (il mio problema era mostrare i caratteri UTF-8 da MySQL al prompt dei comandi),

L'ho risolto in questo modo:

  1. Ho cambiato il carattere del prompt dei comandi in Lucida Console. (Questo passaggio deve essere irrilevante per la tua situazione. Ha a che fare solo con ciò che vedi sullo schermo e non con ciò che è veramente il personaggio).

  2. Ho modificato la tabella codici in Windows-1253. Puoi farlo sul prompt dei comandi di "chcp 1253". Ha funzionato per il mio caso in cui volevo vedere UTF-8.


7
Windws-1253 non è una tabella codici Unicode. È una tabella codici standard da 256 caratteri. Apparentemente hai usato solo personaggi che possono essere visualizzati in quella tabella codici, ma non saranno universali.
Vilx-

3

Questo problema è abbastanza fastidioso. Di solito ho un carattere cinese nel mio nome file e contenuto del file. Nota che sto usando Windows 10, ecco la mia soluzione:

Per visualizzare il nome del file , come diro lsse hai installato Ubuntu bash su Windows 10

  1. Imposta la regione in modo che supporti 8 caratteri non utf.

  2. Successivamente, il carattere della console verrà modificato nel carattere di quella locale e cambierà anche la codifica della console.

Dopo aver eseguito i passaggi precedenti, al fine di visualizzare il contenuto di un file UTF-8 utilizzando lo strumento da riga di comando

  1. Cambia la pagina in utf-8 di chcp 65001
  2. Passa al carattere che supporta utf-8, come Lucida Console
  3. Usa il typecomando per visualizzare il contenuto del file o catse hai installato Ubuntu bash su Windows 10
  4. Si noti che, dopo aver impostato la codifica della console su utf-8, non riesco a digitare il carattere cinese nel cmd usando il metodo di input cinese.

La soluzione più pigra: basta usare un emulatore di console come http://cmder.net/


Questo non ha fatto per me. I caratteri cinesi nell'output del pointcomando sono ancora confusi.
proposito di Yu, il

@SiqingYu Rinuncio all'impostazione pazza. Basta usare blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx
code4j

Ho usato Cmder prima, ma non può sostituire la console per sviluppatori utilizzata da Visual Studio.
proposito di Yu, il

@SiqingYu Intendi la PowerShell interattiva c #?
code4j

Non la shell di potenza interattiva, ma la console per sviluppatori, utilizzata anche da Visual C ++. È la console di debug predefinita nei progetti Applicazione console Win32.
proposito di Yu, il

2

Vedo qui diverse risposte, ma non sembrano rispondere alla domanda: l'utente vuole ottenere l'input Unicode dalla riga di comando.

Windows utilizza UTF-16 per la codifica in due stringhe di byte, quindi è necessario ottenerle dal sistema operativo nel programma. Esistono due modi per farlo:

1) Microsoft ha un'estensione che consente a main di assumere una vasta gamma di caratteri: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Chiama l'API di Windows per ottenere la versione unicode della riga di comando wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

Leggi questo: http://utf8everywhere.org per informazioni dettagliate, in particolare se stai supportando altri sistemi operativi.


Ahh, no, mi dispiace, ma hai perso la domanda. Questo è quando scrivo un programma che riceverà i caratteri Unicode. La mia domanda riguardava l' invio dei personaggi unicode a un altro programma (che si spera supporti la loro ricezione, ma non ho davvero modo di sapere se non lo smontaggio).
Vilx-

2

A partire da giugno 2019, con Windows 10, non dovrai modificare la tabella codici.

Vedi " Presentazione di Windows Terminal " (da Kayla Cinnamon ) e Microsoft / Terminal .
Attraverso l'uso del carattere Consolas, verrà fornito il supporto parziale Unicode.

Come documentato nel Microsoft/Terminalnumero 387 :

Ci sono 87.887 ideografi attualmente in Unicode. Ne hai bisogno anche tu?
Abbiamo bisogno di un limite e i caratteri oltre quel limite dovrebbero essere gestiti dal fallback dei font / collegamento dei font / qualunque cosa.

Cosa dovrebbe coprire Consolas:

  • Caratteri utilizzati come simboli utilizzati dai moderni programmi OSS nella CLI.
  • Questi personaggi dovrebbero seguire il design e le metriche di Consolas e allineati correttamente con i personaggi di Consolas esistenti.

Cosa NON dovrebbe riguardare Consolas:

  • Caratteri e punteggiatura di sceneggiature che oltre al latino, il greco e il cirillico, in particolare i personaggi hanno bisogno di forme complesse (come l'arabo).
  • Questi caratteri devono essere gestiti con il fallback dei caratteri.

1

Una rapida decisione per i file .bat se il computer visualizza il percorso / nome file corretti quando lo si digita nella finestra DOS:

  1. copia con temp.txt [premi Invio]
  2. Digita il percorso / il nome del file [premi Invio]
  3. Premi Ctrl-Z [premi Invio]

In questo modo si crea un file .txt - temp.txt. Aprilo in Blocco note, copia il testo (non preoccuparti, sembrerà illeggibile) e incollalo nel tuo file .bat. L'esecuzione del .bat creato in questo modo in DOS-window ha funzionato per me (cirillico, bulgaro).


1

Una cosa più pulita da fare: basta installare il pacchetto di lingue giapponese giapponese disponibile e gratuito. (Funzioneranno anche altri pacchetti di lingue orientali, ma ho testato quello giapponese.)

Questo ti dà i caratteri con i più grandi set di glifi, li rende il comportamento predefinito, cambia i vari strumenti di Windows come cmd, WordPad, ecc.


1

La modifica della codepage in 1252 funziona per me. Il problema per me è che il simbolo double doller § sta convertendo in un altro simbolo da DOS su Windows Server 2008.

Ho usato CHCP 1252 e un limite prima nella mia dichiarazione BCP ^ §.


Grazie funziona! Non so perché la gente abbia votato questo verso il basso, è una valida alternativa per alcune persone. Questa tabella codici 1252 risolve il problema anche su Windows Server 2012, dove lo stesso codice con CP 65001 non ha funzionato per me. Suppongo che dipenda dalla codepage con cui è stato modificato lo script batch o dalle impostazioni predefinite del sistema operativo. In questo caso è stato creato con Blocco note su una macchina MUI tedesca con sistema operativo di base USA.
Tony Wall

0

Ho aggirato un problema simile eliminando i file con nome Unicode facendo riferimento a loro nel file batch con i loro nomi brevi (8 punti 3).

I nomi brevi possono essere visualizzati facendo dir /x. Ovviamente, questo funziona solo con nomi di file Unicode che sono già noti.

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.