350 votes

Comment utiliser les caractères unicode dans la ligne de commande de Windows ?

Nous avons un projet dans Team Foundation Server (TFS) qui contient un caractère non anglais (š). En essayant de script quelques choses liées à la construction, nous sommes tombés sur un problème - nous ne pouvons pas passer la balise š lettre aux outils de la ligne de commande. L'invite de commande ou quoi que ce soit d'autre fout le bordel, et les tf.exe L'utilitaire ne trouve pas le projet spécifié.

J'ai essayé différents formats pour le fichier .bat (ANSI, UTF-8 avec et sans NOMENCLATURE ) ainsi qu'un script en JavaScript (qui est Unicode par nature) - mais sans succès. Comment puis-je exécuter un programme et lui passer un code Unicode ligne de commande ?

1 votes

@JohannesDewender - Un copier-coller qui a mal tourné ?

2 votes

Python 3.6 : "la console par défaut sous Windows accepte tous les caractères Unicode avec cette version" (enfin, la plupart pour moi) MAIS il faut configurer la console : clic droit en haut de la fenêtre (de la cmd ou de la python IDLE), dans default/font choisir la "Lucida console".

423voto

kgiannakakis Points 62727

Essayez :

chcp 65001

qui changera la page de code en UTF-8. En outre, vous devez utiliser les polices de la console Lucida.

20 votes

Savez-vous s'il y a un moyen de faire en sorte que ce soit la valeur par défaut ?

0 votes

Par moi la police Lucida reste choisie, mais chcp doit être tapé à chaque fois... de toute façon grand merci pour cette astuce, je ne pensais même pas que c'était possible :)

90 votes

Notez qu'il y a de sérieux bogues d'implémentation dans le support de la page de code 65001 de Windows, ce qui brisera de nombreuses applications qui s'appuient sur les méthodes IO de la bibliothèque standard C, ce qui est très fragile. (Les fichiers batch cessent également de fonctionner en 65001.) Malheureusement, UTF-8 est un citoyen de seconde zone sous Windows.

39voto

vanna Points 101

J'ai eu le même problème (je suis de la République tchèque). J'ai une installation anglaise de Windows, et je dois travailler avec des fichiers sur un disque partagé. Les chemins d'accès aux fichiers comportent des caractères spécifiques à la République tchèque.

La solution qui fonctionne pour moi est la suivante :

Dans le fichier batch, changez la page charset

Mon fichier batch :

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

Le fichier batch doit être enregistré dans le CP 1250.

Notez que la console n'affichera pas les caractères correctement, mais elle les comprendra...

1 votes

A la vôtre ! J'en avais besoin pour pouvoir saisir le caractère de copyright dans mon fichier batch.

0 votes

Cela a parfaitement fonctionné pour moi aussi dans une situation presque identique à la vôtre. Au lieu de cela, mon chemin contenait des caractères gaéliques irlandais, à savoir á , é , í , ó y ú .

0 votes

@vanna cela résout mon problème de "caractères turcs et espaces dans le chemin sur le réseau". vous êtes génial.

31voto

efr Points 640

Vérifiez la langue des programmes non-Unicode. Si vous avez des problèmes avec le russe dans la console Windows, vous devez définir le russe ici :

Changing language for non-Unicode programs

7 votes

Cela n'active pas le support de l'Unicode dans cmd il ne fait que changer la page de code par défaut en cp866 qui est toujours un jeu de caractères 8 bits. Il utilise même cp866 au lieu de cp1251 ce qui ajoute son propre lot de problèmes.

1 votes

Voir aussi ma réponse ci-dessous pour la nouvelle option dans les versions plus récentes de Windows 10.

14voto

User Points 13983

En fait, le problème est que l'invite de commande comprend ces caractères non anglais, mais ne peut pas les afficher correctement.

Lorsque j'entre un chemin dans l'invite de commande qui contient des caractères non anglais, il s'affiche sous la forme " ?? ? ????? ? ????". Lorsque vous soumettez votre commande (cd " ??? ? ????? ? ????" dans mon cas), tout fonctionne comme prévu.

2 votes

C'est probablement un peu dangereux car vous pourriez avoir des conflits de noms. Par exemple, si vous avez deux fichiers qui se présentent tous deux sous la forme " ???", et que vous entrez "cd ? ??", il ne saura pas lequel utiliser (ou pire, il choisira un fichier arbitraire).

29 votes

Vous n'entrez pas le nom de famille, vous entrez le vrai nom, qui s'affiche simplement sous la forme d'un nom de famille. Pensez-y comme à une boîte de saisie de mot de passe. Ce que vous saisissez est affiché sous la forme ***, mais le texte original est soumis.

0 votes

Cela fonctionne en effet pour les commandes exécutées directement dans l'invite de commande. Cependant, avec l'exécution d'une .cmd je dois encore mettre chcp 65001 en haut du fichier de commandes.

3voto

Christoforos Points 21

Pour un problème similaire, (mon problème était d'afficher les caractères UTF-8 de MySQL sur une invite de commande),

J'ai résolu le problème de la façon suivante :

  1. J'ai changé la police de l'invite de commande en Lucida Console. (Cette étape ne doit pas être pertinente pour votre situation. Elle n'a à voir qu'avec ce que vous voyez à l'écran et non avec ce qu'est réellement le caractère).

  2. J'ai changé la page de code pour Windows-1253. Vous faites cela à l'invite de commande par "chcp 1253". Cela a fonctionné pour mon cas où je voulais voir UTF-8.

9 votes

Windws-1253 n'est pas une page de code Unicode. C'est un codepage standard de 256 caractères. Apparemment, vous n'avez utilisé que des caractères qui peuvent être affichés dans cette page de code, mais ce ne sera pas universel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X