.bat : Conversion de ANSI en UTF-8 avec CHCP 65001

Rezona -  
brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Jusqu'à présent j'utilisais le format ANSI pour des ".bat". Mais récemment, j'ai découvert des problèmes de compatibilité dû aux caractères spéciaux. J'utilisais (Alt XXXX) pour convertir correctement les lettres accentuées (nom de fichier, chemin du menu Démarrer...).
En cherchant sur internet, j'ai trouvé une solution qui conssiste à ajouter CHCP 65001 en début de code et à remetttre les accents tel quel sans  (Alt XXXX) pour enregistrer au format UTF-8.

Ma question est, possédant un certain nombre de fichier ".bat" que je ne souhaite pas retester un par un, l'utilisation de CHCP 65001 peut-il créer des perturbations, erreurs... à des fichier .bat qui fonctionnait à merveille en ANSI + (Alt XXXX)?

Merci pour vos avis et, si besoin, éclaircissements.

A voir également:

2 réponses

brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention   3 399
 

Bonjour,

Il faudrait que tu précises comment tu as procédé, ce n'est pas clair.

En supposant le test suivant:

echo menu dALT 130marrer

pause

je suis incapable d'obtenir l'affichage correct quand le bat ou cmd est enregistré que ce soit sous ANSI ou sous UTF8 dès lors que le caractère ASCII a été utilisé; il est obtenu seulement si j'ajoute la séquence CHCP 65001 au fichier ANSI et que je l'enregistre sous UTF8.

La moralité est donc que CHCP 65001 ne suffit pas et qu'il faut convertir par lot tous les fichiers de ANSI à UTF8, voir par exemple ici, en remplaçant bien sûr unicode par utf-8 et csv par bat ou cmd.

https://stackoverflow.com/questions/44157064/need-to-batch-convert-a-large-quantity-of-text-files-from-ansi-to-unicode

De manière subsidiaire:

-Si je ne veux pas en voir l'affichage, saisir CHCP 65001>NUL

-Dans un certain nombre de cas de figure (de mémoire par exemple ROBOCOPY), c'est la commande elle-même qui retourne des caractères exotiques même en l'absence d'accents, il faut alors entrer CHCP 1252>NUL, qu'on alternera au besoin avec 65001 dans son fichier de commandes.

0
brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention   3 399
 

Qui plus est et si la question est de modifier tous les fichiers sans les ouvrir, il faudra bien que je les ouvre un par un en dehors de réenregistrer pour y ajouter
CHCP 65001>NUL.

Le hic est que si je veux passer à la trappe l'affichage de cette commande, il ne doit pas avoir lieu à la première ligne de chaque fichier mais à la deuxième après la commande @echo off.

La question est facile à régler avec un utilitaire et/ou une commande appropriée dans le monde Linux, beaucoup moins sous Windows en batch brut de coffrage.

On peut le cas échéant s'inspirer de quelque chose de ce genre, mais on a sans doute plus vite fait de modifier manuellement chaque fichier au moment de l'emploi.

https://msfn.org/board/topic/118835-prepend-or-interpend-text-to-a-text-file-via-batch-script/
 

0
Rezona
 

Bonjour,

Merci pour la réponse.

Je vais essayer de préciser un peu plus :

1) J'utilise le bloc-note et tape le code nécessaire en prenant soin de remplacer les caractères spéciaux grâce au code "ALT + (code)". Par exemple :

Call "C:\ProgramData\Microsoft\Windows\Start Menu\Documents à vérifier.lnk"

je remplace "à" par "ALT + 0133"

et je remplace "é" par "ALT + 0130"

Ce qui donne :

Call "C:\ProgramData\Microsoft\Windows\Start Menu\Documents … v‚rifier.lnk"

Enregistré en ANSI, cela fonctionne parfaitement sur un Windows français.

> Pour des raisons de compatibilité, je dois changer ma méthode.

2) Évidemment, je dois ouvrir chaque fichier ".bat" pour faire les modifications : ajout de CHCP 65001 + ajouter les accents spéciaux sans modification + encodage en UTF-8. Cependant, je ne souhaite pas les exécuter un à un afin de vérifier que les opérations s’effectuent sans erreurs.

Bref, la question principale étant :

Est-ce que "CHCP 65001" + "UTF-8" pourraient créer des problèmes d'exécution du code .bat (call, start, rd, variable...) par rapport à ma base ANSI ?

Si non, la solution me convient.

* Je ne souhaite pas utiliser PowerShell.

0
brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention   3 399
 

Bonjour,

J'avais bien compris mais, comme dit précédemment, sans CHCP 65001 je n'arrive pas à reproduire le comportement: si j'entre des caractères ALT, l'affichage n'est pas correct que ce soit enregistré sous ANSI ou UTF-8, cela tient peut-être à la police système de la console selon la version du système d'exploitation.

Il devient bien sûr correct si j'exécute:
 

@echo off
CHCP 65001>NUL
echo "C:\ProgramData\Microsoft\Windows\Start Menu\Documents ALT 133 vALT 130.lnk"
pause

enregistré sous UTF-8 et cela n' a aucune incidence sur les commandes puisque les chemins sont lus correctement.

Comme l'effet semble version dépendant, je t'invite à faire un test en créant le batch ci-dessus, si ça fonctionne pour un, ça fonctionnera pour tous.

En passant et le cas échéant dans d'autres situations que les batchs, les caractères ASCII y compris les espaces sont une source d'ennuis: je préfère dans cette situation appeler mon fichier

Documents_a_verifier

0
brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention   3 399 > brucine Messages postés 21609 Date d'inscription   Statut Membre Dernière intervention  
 

L'affichage de la console est d'ailleurs peut-être, je ne me souviens plus, indépendant de la bonne exécution de la commande.

En dehors de l'aspect esthétique de la question pour les commandes echo, à tester si tu as du temps à perdre avec un test comme précédemment où au lieu de echo en 3 par exemple on copie le fichier ailleurs.

0