Chenc, changer l'encodage d'un fichier en un clin d'oeil

Les notions d'encodage sont mal connues de la plupart des développeurs et donnent souvent lieu à des problèmes pas toujours évidents à corriger.

JE n'ai ni le temps, ni les compétances, ni l'envie de révolutionner le domaine, mais voici une petite contribution qui pourrait vous être utile: un petit utilitaire tout simple en ligne de commande pour windows servant à déterminer l'encodage de caractères utilisé par un fichier et de le changer si besoin.

J'ai conçu cet utilitaire à la suite d'un problème courant et très simple qui m'est arrivé, et je n'avais pas de moyen rapide pour y remédier.

Je voulais convertir, si possible automatiquement, une série de pages HTML statiques de ISO-8859-1 en UTF-8. Pour compliquer la tâche, j'avais déjà modifié et converti certains fichiers au passage, je ne rappelais plus exactement lesquels, et pour faire encore mieux c'était avec le bloc-notes par défaut de windows, qui a la magnifique habitude grotesque, dépassée et inutile d'ajouter un BOM au début de tous les fichiers qu'il encode en UTF-8. Le plus gros problème était alors de supprimer automatiquement le BOM des fichiers déjà convertis, et de convertir les autres.

Certains vont me dire que j'aurais pu utiliser iconv, il en existe une version pour windows. Mais chenc fait deux choses qu'iconv ne fait pas :

Fonctionnalités

Pas de quoi casser trois pattes à un canard, cet utilitaire fait peu de choses mais essaie de les faire bien :

Voici l'aide de la commande, celle qui s'affiche lorsqu'on ne fournit aucun argument :

 
chenc - change encoding
chenc [infile]
chenc [infile] [outenc] {outfile}
chenc {-i [infile]|stdin} {-o [outfile]|stdout} {-s [sourceEncoding]} {-t {targetEncoding]}
chenc -l

Options :
-i Input file
-l List supported encodings
-s Source encoding (encoding of input file)
-t Target encoding (desired encoding in output file)
-o Output file

If no output file and encodings are given, chenc just try to guess the encoding of the input file and returns its guess without further action.
If no source encoding is given, chenc try to guess the encoding of the input file automatically
If no output file is given, chenc overwrites the input file.

La version exécutable de ce petit utilitaire et son code source en accès libre sont disponibles ci-dessous.

En espérant que ça pourra vous servir !

Téléchargement

Binaire: Télécharger chenc.exe, 39 Ko (5373 téléchargements)
Source: Télécharger chenc.c, 9 Ko (6116 téléchargements)

Aucune installation n'est nécessaire, il suffit de mettre l'exécutable dans le path pour qu'il fonctionne.

Commentaires

1. abdellahzineddin@gmail.com, 14.06.2014 14:30:45

cher ami, je ne suis qu'un utilisateur symple, mais, si vous me le permettez, j'ai une petite question: je ne sais pas où je peux mettre cet utilitaire? c'est-à dire: chenc.c.
merci d'avance.

2. QuentinC, 17.06.2014 06:17:33

Chenc.c c'est le code source, tu n'en as pas besoin si tu ne souhaites pas modifier le programme.

3. rcol69, 24.09.2015 12:03:07

Votre utilitaire m'a rendu un grand service aujourd'hui ! C'est vrai que c'est toujours chiant de devoir changer l'encodage de son site... Merci à vous

4. eelseb, 06.08.2016 16:21:30

Merci bcq, très pratique

5. Bucket, 13.02.2017 10:57:37

Bonjour,
en ce qui me conserne, peu importe le fichier testé votre programme detecte "windows-1254".
J'ai testé avec des fichiers encodé en UTF8 avec et sans BOM ainsi qu'avec des fichiers encodé en ANSI.
Une idée d'où pourrait venir mon probleme ?
Merci d'avance

6. spiderman, 11.04.2017 15:59:39

Super pratique. Mieux que iconv. Merci beaucoup !

7. raphaël, 11.08.2017 14:04:33

Génial, merci beaucoup !

8. John FENDER, 21.11.2017 01:20:37

Putain Quentin ma couille ça déchire du slip ton petit programme là, des années que je cherchais un petit exe comme ça. Bravo, bravo bravo !

9. Jmarc, 29.01.2018 16:19:35

Je pensais avoir trouvé l'outil magique, mais pour certains fichiers UTF-8 (scripts SQL), il me donne Windows-1252.
Une idée ?

10. Jmarc, 29.01.2018 17:04:00

Finalement c'est un vrai outil magique, après comparaison avec plusieurs éditeurs et fonctions linux. Mon fichier litigieux était en fait en ASCII brut.
Merci beaucoup QuentinC.

11. Philou25, 31.01.2018 13:02:22

Un grand merci QuentinC pour ce petit programme d'une grande utilité.
Fonctionne à merveille.

12. Noureddine, 21.04.2018 18:59:07

Merci, Merci infiniment.

13. After, 18.12.2018 16:27:39

Il ne peut ouvrir ce fichier et je ne sais pas pourquoi.

-> chenc.exe -i jeuflash -o jeu -s c3p -t swf
-> Couldn't open input file: jeu flash

Besoin d'aide svp, merci

14. QuentinC, 04.02.2019 07:06:31

Chenc n'est pas conçu pour ouvrir des fichiers binaires comme votre animation flash.

15. AdrienD, 14.08.2019 22:49:08

Merci Quentin ! Génial, super pratique.

16. test, 28.08.2019 19:19:41

Bonjour Mme Test SM,

Vous venez de souscrire à un Pack Déménagement, sur le site laposte.fr et nous vous en remercions. Les services dont vous bénéficiez dans le cadre de votre Pack D?m?nagement sont valables à compter de ce jour 30/08/2019 et jusqu'? 29/02/2020

17. tmd2900, 04.02.2020 12:46:38

hello

super petit programme bien sympathique pas encore pris en défaut aujourd'hui

petite suggestion d'évolution ? lors du test de l'encodage d'un fichier, avoir un return code qui donne cet encodage.
on pourrait ainsi scripter un test de tous les fichiers d'un répertoire et décider par exemple de convertir en utf8 ceux qui ne le sont pas :-)

18. jerome, 01.04.2020 15:00:28

complément à ma demande sur progliste :
erreurs de compilation avec tcc :
C:\tcc>tcc chenc.c
chenc.c:84: warning: implicit declaration of function 'MultiByteToWideChar'
chenc.c:86: warning: implicit declaration of function 'malloc'
chenc.c:86: warning: assignment makes pointer from integer without a cast
chenc.c:88: warning: implicit declaration of function 'free'
chenc.c:98: warning: implicit declaration of function 'WideCharToMultiByte'
chenc.c:102: warning: assignment makes pointer from integer without a cast
chenc.c:108: warning: assignment makes pointer from integer without a cast
chenc.c:133: warning: assignment discards qualifiers from pointer target type
chenc.c:137: error: 'CP_ACP' undeclared

19. jocko, 01.07.2020 10:56:14

Bravo, voilà un petit utilitaire bien fait et bien efficace. Merci

Commenter