Forum Clubic

Problème d'accents en batch

Bonjour,

J’ai un problème avec les accents dans un fichier batch.
Par exemple si j’ai la commande rename Original.txt Modifié.txt j’obtiens ceci : ModifiÚ.txt
En revanche, si je tape la commande dans une fenêtre d’invit’ de commande, alors j’ai bien Modifié.txt.

J’utilise Notepad++ pour éditer mon fichier bat, et j’ai essayé de convertir le fichier bat en UTF8 mais ça n’a pas donné le résultat espéré.

Que dois-je faire pour que les accents soient correctement gérés dans mon bat ?
J’ai trouvé une solution toute simple pour ce cas précis, mais j’espère tout de même avoir des réponses…
Edité le 25/12/2013 à 05:22

:hello:

LE fameux problème d’encodage de caractères dans la console Windows …

C’est pour cette raison (entres autres) que je suis passé à Cygwin, histoire d’utiliser les outils Unix et le langage Bash …

Ceci étant il y a une solution :

Tout d’abord dans une fenêtre de ligne de commande, regarde quel est l’encodage actuel de la ligne de commande en saisissant :

chcp

En principe, la valeur par défaut pour un Windows français est OEM 850.
Dans Notepad ++, dans l’onglet encodage / codage de caractères / langues d’europe occidentale / choisis OEM 850.
En revanche, il y a un défaut à cette méthode : Il faudra modifié le batch pour corriger les accents. :jap:

Pour info, à ma connaissance, la console Windows ne supporte pas Unicode. :sweet:

Edit : A voir si éventuellement on peut lancer un batch en utilisant le Powershhel, peut être est-ce que l’on peut contourner le problème de cette façon ? (je ne connais ni le langage powershell, ni l’interpréteur).
Edité le 25/12/2013 à 10:58

Merci Juju pour ta réponse. :slight_smile:

Comme j’ai écrit ce matin, j’ai trouvé une solution, mais j’espérais avoir des réponses pour voir s’il y avait mieux.

Alors je viens de faire le chcp et j’obtiens bien 850 comme tu disais. :super:
Je crois bien qu’avant de poster j’avais essayé OEM 850 dans Notepad++, et que ça donnait un autre résultat que “ModifiÚ.txt”, mais un résultat incorrecte tout de même.

La solution que j’ai trouvée sur le Net, mais que je ne comprends pas, c’est simplement d’ajouter une commande, que j’ai placée au tout début du fichier batch : chcp 28591 > nul
Pourquoi 28591 et pas une autre valeur ??? J’avoue que je n’en sais rien du tout.

Ce que je trouve étrange, c’est que si je regarde le déroulement dans la fenêtre d’invit’ de commande, je vois toujours ces caractères “bizarres”, mais en revanche le résultat obtenu est parfaitement correcte.
Edité le 25/12/2013 à 19:37

Peut être un début d’explication ici : www.developpez.net… ?

Mais je t’avoue que je ne connais pas énormément l’encodage des caractères avec la ligne de commandes, je sais juste que c’est assez galère avec les histoires d’accents et autres. :confused:
Edité le 25/12/2013 à 21:54

Bonsoir,

Par défaut sur Windows en Europe occidentale, de XP jusqu’à 7, l’encodage utilisé est le CP-1252[/url]. Appelé aussi mais à tord [url=https://fr.wikipedia.org/wiki/ANSI]ANSI.

Sauf que le terminal utilise l’encodage CP-850 qui est beaucoup plus limité.

Les tables sont communes de 0 à 126 (’~’) à celle de l’ASCII, mais pour le reste il faut convertir obligatoirement.

Pour connaître l’encodage utilisé dans la console il suffit de taper : mode con cp

Qui devrait renvoyer : Page de codes : 850

Par exemple pour pouvoir écrire le caractère ‘é’ (130 en décimal dans la table CP-850) il faut le remplacer par ‘,’ (130 dans la table CP-1252) qui est nullement la virgule classique (44) mais une autre sorte de virgule.

Voici un fichier que je m’étais fait pour rapidement coller ces caractères : http://pastebin.com/SBGikzyc

Ne pouvant pas mettre ici le code qui risquerait d’être converti par le site sous un autre encodage, voici le résultat :

http://img51.imageshack.us/img51/7348/6bzo.png

http://img812.imageshack.us/img812/3740/2vhc.png

Je ne sais pas s’il est possible d’utiliser l’UTF-8 pour le batch, mais par contre on peut avec Notepad++ facilement écrire sans se soucier de retenir la table de conversion.

Dans Notepad++ : Encodage : Codage de caractères : Langues d’Europe occidentale : OEM 850

[spoiler]http://img513.imageshack.us/img513/7060/r0e6.png[/spoiler]

Qui donnera en ANSI :

http://img62.imageshack.us/img62/2078/ml1i.png

Et donnera en CP-850 :

http://img59.imageshack.us/img59/9615/0g51.png

Il suffira donc d’écrire en encodage OEM 850 et d’enregistrer ensuite en ANSI le fichier.


Mince je viens juste de lire le message de juju251... Désolé pour le doublon :ennuye:

Ça complète un peu
Edité le 25/12/2013 à 23:17

Il s’agit du codage ISO-8859-1 (Latin 1) ou Windows 28591[/url] qui est entièrement intégré dans la table [url=http://msdn.microsoft.com/en-us/goglobal/cc305145]CP-1252, mais ce dernier en contient plus. Tu risques donc de perdre certains caractères de 0x80 à 0x9F, comme le symbole euro par exemple.

Tu peux essayer : chcp 1252 > nul
Edité le 25/12/2013 à 23:30

Merci Juju,c’est justement sur cette page que j’avais récupéré l’astuce en question. :wink:

Merci YCL1 pour ta réponse extrèmement documentée ! :super:

Toutefois, ayant la comprenette particulièrement longue à la détente, je n’ai pas tout saisi. :frowning:
Aurais-tu la patience de m’expliquer la chose en utilisant un exemple de mon invention ???