Des questions sur la façon d'effectuer les entrées/sorties Unicode et la tuyauterie apparaissent régulièrement sur le Forums d'assistance pour les logiciels JP. Cela peut être un problème compliqué en raison de la façon dont Windows a été construit : en utilisant principalement des fichiers ASCII en externe, mais UTF16 pour la plupart des API Windows. Cela signifie que chaque fois que le processeur de commandes (TCC ou CMD) lit un fichier ASCII, il doit le convertir en UTF-16 avant de pouvoir appeler une API ou l'afficher à l'écran. Et lorsque vous effectuez une redirection de sortie vers un fichier (c'est-à-dire « dir > file.dat »), le processeur de commandes doit le reconvertir d'UTF16 en ASCII. Malheureusement, cette conversion ASCII -> UTF16 -> ASCII n'est pas fiable à 100%. En fonction de votre page de codes et de votre police, l'ASCII entrant dans Windows ne correspondra pas toujours à l'ASCII qui revient.
Une solution consiste à utiliser Unicode au lieu d'ASCII. TCC peut gérer de manière transparente les fichiers ASCII ou Unicode (UTF16 ou UTF8) partout où il recherche une entrée de fichier. Si vous définissez la directive « Sortie Unicode » dans TCC (OPTION / Démarrage), TCC utilisera UTF16 pour la redirection de sortie ou la tuyauterie, et recherchera UTF16 dans son entrée de canal. Cette approche fonctionne bien si vous utilisez TCC des commandes internes ou des applications externes qui reconnaissent les fichiers UTF16.
Alternativement, la version actuelle de TCC permet également d'utiliser UTF8 (largement utilisé par tout sauf Windows) pour l’entrée et la sortie. Cela nécessite de désactiver la directive « Sortie Unicode » et de définir trois éléments :
- Modifiez votre page de codes en 65001 (entrez « chcp 65001 » à l'invite).
- Ajoutez la directive « UTF8Output=Yes » à votre fichier TCMD.INI dans la section [4NT].
- Allez dans OPTION / Démarrage et sélectionnez l'option « UTF8 ».
TCC traitera ensuite tous les fichiers d'entrée en UTF8 et écrira toute sa sortie en UTF8.
Mais de nombreuses applications Windows (y compris CMD) ne peuvent gérer ni les fichiers UTF16 ni UTF8. Alors, comment pouvons-nous mélanger nos formats – parfois lire et écrire ASCII, et parfois Unicode ? TCC a des options pour ce faire :
- >:a – La sortie redirigée (STDOUT et/ou STDERR) est ASCII (caractères 8 bits)
- >:u – La sortie redirigée est UTF16 Unicode
- >:8 ou >:u8 – La sortie redirigée est UTF8
- >>:a – La sortie redirigée ajoutée est ASCII
- >>:u – La sortie redirigée ajoutée est UTF16 Unicode
- >>:8 ou >>:u8 – La sortie redirigée ajoutée est UTF16
Et vous pouvez faire la même chose avec les tuyaux :
- |:a – La sortie redirigée est ASCII
- |:u – La sortie canalisée est UTF16
- |:8 ou |:u8 – La sortie canalisée est UTF8
La combinaison de ces options nous permet de configurer TCC pour répondre à nos besoins – soit principalement Unicode avec des exceptions pour les applications qui ne peuvent pas le gérer, soit principalement ASCII avec des exceptions pour les applications qui peuvent prendre (ou nécessiter) UTF8 ou UTF16. Consultez également le TCC commandement interne TUYAU, qui prend en charge à la fois UTF8 et UTF16 et propose une grande variété d'options de conversion.