Nous avons un projet dans Team Foundation Server (TFS) qui contient un caractère non anglais (š). Lorsque nous essayons de scripter quelques éléments liés à la construction, nous sommes tombés sur un problème - nous ne pouvons pas transmettre la lettre š aux outils de ligne de commande. L'invite de commande ou quoi d'autre le gâche, et l' utilitaire tf.exe ne peut pas trouver le projet spécifié.
J'ai essayé différents formats pour le fichier .bat (ANSI, UTF-8 avec et sans BOM ) ainsi que le scriptage en JavaScript (qui est intrinsèquement Unicode) - mais pas de chance. Comment exécuter un programme et lui passer une ligne de commande Unicode ?
Réponses:
Mon parcours: j'utilise les entrées / sorties Unicode dans une console depuis des années (et je le fais beaucoup quotidiennement. De plus, je développe des outils de support pour exactement cette tâche). Il y a très peu de problèmes, pour autant que vous compreniez les faits / limitations suivants:
CMD
et «console» sont des facteurs indépendants.CMD.exe
est juste un des programmes qui sont prêts à «fonctionner à l'intérieur» d'une console («applications console»).CMD
a un support parfait pour Unicode; vous pouvez entrer / sortir tous les caractères Unicode lorsqu'une page de code est active.chcp 65001
est très dangereux. À moins qu'un programme ait été spécialement conçu pour contourner les défauts de l'API de Windows (ou utilise une bibliothèque d'exécution C qui a ces solutions de contournement), il ne fonctionnerait pas de manière fiable. Win8 corrige la moitié de ces problèmescp65001
, mais le reste est toujours applicable à Win10 .cp1252
. Comme je l'ai déjà dit: Pour entrer / sortir Unicode dans une console, il n'est pas nécessaire de définir la page de code .Les détails
File-I/O
API, mais l'Console-I/O
API. (Pour un exemple, voyez comment Python le fait .)U+10000
). Seul le rendu de texte simple est pris en charge (donc les langues européennes - et certaines d'Asie de l'Est - devraient fonctionner correctement - dans la mesure où l'on utilise des formes précomposées). [Il y a des petits caractères ici pour l'Asie de l'Est et pour les caractères U + 0000, U + 0001, U + 30FB.]Considérations pratiques
Les valeurs par défaut sur Windows ne sont pas très utiles. Pour une meilleure expérience, il faut régler 3 éléments de configuration:
Encore un gotcha avec "Pasting" dans une application console (très technique):
KeyUp
desAlt
; toutes les autres façons de livrer un personnage se produisentKeyDown
; tant d'applications ne sont pas prêtes à voir un personnageKeyUp
. (Applicable uniquement aux applications utilisant l'Console-I/O
API.)Ctrl-Alt-AltGr-Kana-Shift-Gray*
), il est fourni sur une touche émulée. C'est ce que toute application attend - donc coller tout ce qui ne contient que de tels caractères est très bien.Conclusion :moinsvotre misepage clavier prendchargeentrée d'un grand nombre de caractères sans touches préfixe, certaines applications buggy peut sautercaractères lorsque vous
Paste
via l'interface utilisateur deconsole:Alt-Space E P
. ( C'est pourquoi je recommande d'utiliser mes dispositions de clavier!)Il ne faut pas oublier non plus que les «consoles alternatives« plus performantes »» pour Windows ne sont pas du tout des consoles . Ils ne prennent pas en charge les
Console-I/O
API, donc les programmes qui s'appuient sur ces API pour fonctionner ne fonctionneraient pas. (Les programmes qui n'utilisent que des «API d'E / S de fichier pour les descripteurs de fichiers de la console» fonctionneraient bien, cependant.)Un exemple d'une telle non-console fait partie de MicroSoft
Powershell
. Je ne l'utilise pas; pour expérimenter, appuyez et relâchezWinKey
, puis tapezpowershell
.(D'un autre côté, il existe des programmes tels que
ConEmu
ouANSICON
qui essaient d'en faire plus: ils «tentent» d'intercepter lesConsole-I/O
API pour que les «vraies applications de console» fonctionnent également. Cela fonctionne certainement pour les exemples de programmes jouets; dans la vie réelle, cela peut peut ne pas résoudre vos problèmes particuliers. Expérience.)Résumé
définir la police, la disposition du clavier (et éventuellement autoriser la saisie HEX).
utilisez uniquement des programmes qui passent par des
Console-I/O
API et acceptez les arguments de ligne de commande Unicode. Par exemple, toutcygwin
programme compilé devrait convenir. Comme je l'ai déjà dit,CMD
c'est bien aussi.UPD: Au départ, pour un bug
cp65001
, je mélangeais les couches noyau et CRTL ( UPD²: et API en mode utilisateur Windows!). Aussi: Win8 corrige la moitié de ce bogue; J'ai clarifié la section sur l'application «meilleure console» et ajouté une référence à la façon dont Python le fait.la source
.log
fichiers, c'est un bug intermittent danszip -ru
[?!]. Je n'ai aucune idée de comment le déboguer - ou éviter à l'avenir…)Essayer:
ce qui changera la page de codes en UTF-8. Vous devez également utiliser les polices de la console Lucida.
la source
J'ai eu le même problème (je viens de la République tchèque). J'ai une installation en anglais de Windows et je dois travailler avec des fichiers sur un lecteur partagé. Les chemins d'accès aux fichiers incluent des caractères spécifiques à la République tchèque.
La solution qui fonctionne pour moi est:
Dans le fichier batch, changez la page du jeu de caractères
Mon fichier batch:
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 ...
la source
á
,é
,í
,ó
etú
.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:
la source
cmd
, il ne fait que basculer la page de code par défaut verscp866
laquelle est toujours un jeu de caractères 8 bits. Il utilise mêmecp866
au lieu decp1251
quoi ajoute sa propre merde de problèmes.Il est assez difficile de changer la page de codes par défaut de la console Windows. Lorsque vous effectuez une recherche sur le Web, vous trouvez différentes propositions, mais certaines d'entre elles peuvent complètement casser votre Windows, c'est-à-dire que votre PC ne démarre plus.
La solution la plus sécurisée est celle-ci: Accédez à votre clé de registre
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
et ajoutez String valueAutorun
=chcp 65001
.Ou vous pouvez utiliser ce petit Batch-Script pour les pages de codes les plus courantes.
Utiliser
@chcp 65001>nul
au lieu dechcp 65001
supprime la sortie "Page de codes active: 65001" que vous obtiendrez chaque fois que vous démarrez une nouvelle fenêtre de ligne de commande.Une liste complète de tous les numéros disponibles que vous pouvez obtenir à partir des identificateurs de page de code
Remarque, les paramètres ne s'appliqueront qu'à l'utilisateur actuel. Si vous souhaitez le définir pour tous les utilisateurs, remplacez la ligne
SET ROOT_KEY="HKEY_CURRENT_USER"
parSET ROOT_KEY="HKEY_LOCAL_MACHINE"
la source
En fait, l'astuce est que l'invite de commande comprend réellement ces caractères non anglais, ne peut tout simplement pas les afficher correctement.
Lorsque j'entre un chemin dans l'invite de commande qui contient des caractères non anglais, il s'affiche comme "?? ?????? ?????". Lorsque vous soumettez votre commande (cd "??? ?????? ?????" dans mon cas), tout fonctionne comme prévu.
la source
.cmd
fichier de commandes, je dois toujours mettrechcp 65001
en haut du fichier de commandes.Sur une machine Windows 10 x64, j'ai fait que l'invite de commande affiche les caractères non anglais en:
Ouvrez une invite de commande élevée (exécutez CMD.EXE en tant qu'administrateur). Recherchez dans votre registre les polices TrueType disponibles sur la console en:
Vous verrez une sortie comme:
Nous devons maintenant ajouter une police TrueType qui prend en charge les caractères dont vous avez besoin, comme Courier New. Nous faisons cela en ajoutant des zéros au nom de la chaîne, donc dans ce cas, le suivant serait "000":
Maintenant, nous implémentons le support UTF-8:
Définissez la police par défaut sur "Courier New":
Définissez la taille de police sur 20:
Activez l'édition rapide si vous le souhaitez:
la source
Comme je n'ai pas vu de réponses complètes pour Python 2.7, je vais décrire les deux étapes importantes et une étape facultative qui est assez utile.
Defaults
option. Cela donne également accès aux couleurs. Notez que vous pouvez également modifier les paramètres des fenêtres de commande invoquées de certaines manières (par exemple, ouvrir ici, Visual Studio) en choisissant à laProperties
place.cp65001
, ce qui semble être la tentative de Microsoft pour offrir la prise en charge UTF-7 et UTF-8 à l'invite de commande. Pour ce faire, exécutezchcp 65001
dans l'invite de commande . Une fois réglé, il reste ainsi jusqu'à la fermeture de la fenêtre. Vous devrez refaire cela chaque fois que vous lancerez cmd.exe.Pour une solution plus permanente, reportez-vous à cette réponse sur Super User. En bref, créez une
REG_SZ
entrée (String) à l'aide de regedit atHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
et nommez-laAutoRun
. Modifiez sa valeur enchcp 65001
. Si vous ne souhaitez pas voir le message de sortie de la commande, utilisez@chcp 65001>nul
plutôt.Certains programmes ont du mal à interagir avec cet encodage, MinGW étant un notable qui échoue lors de la compilation avec un message d'erreur absurde. Néanmoins, cela fonctionne très bien et ne cause pas de bugs avec la majorité des programmes.
la source
J'ai trouvé cette méthode utile dans les nouvelles versions de Windows 10:
Activez cette fonctionnalité: "Bêta: utilisez Unicode UTF-8 pour la prise en charge des langues dans le monde entier"
la source
Une option vraiment simple consiste à installer un shell bash Windows tel que MinGW et à l'utiliser:
Il y a un peu de courbe d'apprentissage car vous devrez utiliser la fonctionnalité de ligne de commande Unix, mais vous allez adorer sa puissance et vous pouvez définir le jeu de caractères de la console sur UTF-8.
Bien sûr, vous obtenez également tous les goodies habituels * nix comme grep, find, less, etc.
la source
Pour un problème similaire, (mon problème était d'afficher les caractères UTF-8 de MySQL sur une invite de commande),
Je l'ai résolu comme ceci:
J'ai changé la police de l'invite de commande en Lucida Console. (Cette étape ne doit pas être pertinente pour votre situation. Elle ne concerne que ce que vous voyez à l'écran et non ce qui est vraiment le personnage).
J'ai changé la page de code en Windows-1253. Vous faites cela sur l'invite de commande par "chcp 1253". Cela a fonctionné pour mon cas où je voulais voir UTF-8.
la source
Ce problème est assez ennuyeux. J'ai généralement du caractère chinois dans mon nom de fichier et le contenu du fichier. Veuillez noter que j'utilise Windows 10, voici ma solution:
Pour afficher le nom du fichier , tel que
dir
ouls
si vous avez installé Ubuntu bash sur Windows 10Définissez la région pour prendre en charge le caractère non utf 8.
Après cela, la police de la console sera remplacée par la police de cet environnement local, et cela modifie également l'encodage de la console.
Après avoir effectué les étapes précédentes, afin d'afficher le contenu d'un fichier UTF-8 à l'aide de l'outil de ligne de commande
chcp 65001
type
commande pour consulter le contenu du fichier, oucat
si vous avez installé Ubuntu bash sur Windows 10La solution la plus paresseuse: utilisez simplement un émulateur de console tel que http://cmder.net/
la source
point
commande sont encore tronqués.Je vois plusieurs réponses ici, mais elles ne semblent pas répondre à la question - l'utilisateur veut obtenir une entrée Unicode à partir de la ligne de commande.
Windows utilise UTF-16 pour l'encodage en chaînes de deux octets, vous devez donc les obtenir du système d'exploitation dans votre programme. Il y a deux façons de faire ça -
1) Microsoft a une extension qui permet à main de prendre un large tableau de caractères: int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx
2) Appelez l'API Windows pour obtenir la version unicode de la ligne de commande wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw
Lisez ceci: http://utf8everywhere.org pour des informations détaillées, en particulier si vous prenez en charge d'autres systèmes d'exploitation.
la source
À partir de juin 2019, avec Windows 10, vous n'aurez plus à modifier la page de code.
Voir « Présentation de Windows Terminal » (de Kayla Cinnamon ) et Microsoft / Terminal .
Grâce à l'utilisation de la police Consolas, un support partiel Unicode sera fourni.
Comme indiqué dans le
Microsoft/Terminal
problème 387 :la source
Une décision rapide pour les fichiers .bat si votre ordinateur affiche votre chemin / nom de fichier correct lorsque vous le tapez dans la fenêtre DOS:
De cette façon, vous créez un fichier .txt - temp.txt. Ouvrez-le dans le Bloc-notes, copiez le texte (ne vous inquiétez pas, il sera illisible) et collez-le dans votre fichier .bat. L'exécution du .bat créé de cette façon dans la fenêtre DOS a fonctionné pour moi (cyrillique, bulgare).
la source
Une meilleure solution de nettoyage: installez simplement le pack de langue japonais Microsoft disponible et gratuit. (D'autres packs de langues orientales fonctionneront également, mais j'ai testé le japonais.)
Cela vous donne les polices avec les plus grands ensembles de glyphes, en fait le comportement par défaut, change les différents outils Windows comme cmd, WordPad, etc.
la source
Changer la page de codes en 1252 fonctionne pour moi. Le problème pour moi est que le symbole double doller § se convertit en un autre symbole par DOS sur Windows Server 2008.
J'ai utilisé CHCP 1252 et un cap avant dans ma déclaration BCP ^ §.
la source
J'ai rencontré un problème similaire en supprimant les fichiers nommés Unicode en me référant à eux dans le fichier de commandes par leurs noms courts (8 points 3).
Les noms courts peuvent être consultés en faisant
dir /x
. Évidemment, cela ne fonctionne qu'avec les noms de fichiers Unicode déjà connus.la source