Bonjour,
J'ai plein de fichiers en UTF-8859-1, et je voudrais tous les passer en UTF8 avec une commande.
Est-ce que cela existe ?
Bonjour,
J'ai plein de fichiers en UTF-8859-1, et je voudrais tous les passer en UTF8 avec une commande.
Est-ce que cela existe ?
Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.
man iconvEnvoyé par gifffftane
iconv -f ISO-8859-1 -t UTF-8 filename.in > filename.out
Déjà, iconv, c'est bien, merci.
Mais... et si je veux changer de nombreux fichiers répartis dans un répertoire et ses sous-répertoires ? D'après le man, je ne peux modifier les fichiers que un par un, et je dois tous les renommer
Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.
ça n'a rien à voir avec iconv…Envoyé par gifffftane
c'est un problème classique de traitement de fichiers :
vous faites un script qui prend en paramètre le fichier à traiter,
fais le traitement en plaçant le résultat dans un fichier temporaire et
remplace l'original par le temporaire
par exemple pour convertir tous les .txt dans un répertoire et ses sous-répertoires :
et conv.sh
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 find TARGET_DIR -name *.txt -exec conv.sh ISO-8859-1 UTF-8 {} \; rm /tmp/conv.tmp 2> /dev/null
(notez qu'il serait prudent de gérer les erreurs au cas où la conversion ne serait pas correcte… par exemple avec stat -f %z /tmp/conv.tmp pour tester la taille du fichier généré… - voir aussi l'option -c de iconv)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #!/bin/sh iconv -f "$1" -t "$2" "$3" > /tmp/conv.tmp cp -f /tmp/conv.tmp "$1"
Finalement, j'ai préféré me débrouiller avec un shell... en java (le beanshell, plus exactement). Cela te paraitra peut être surprenant, mais il est possible d'écrire un script shell unix en java, et comme je connais nettement mieux ce système...
Voici ce que j'ai écrit (remarque le #! magique de départ) :
Ce script lit la liste des fichiers à traduire sur l'entrée standard, et les traduit dans l'encodage désiré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 #! /bin/bash //bin/bash -c "exec java bsh.Interpreter $0 $1 $2";exit import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; scan = new Scanner(System.in); tmp = File.createTempFile("codeconv", "tmp"); tmp.deleteOnExit(); while (scan.hasNextLine()) { // lecture et transformation du fichier vers un temporaire nomfichier = scan.nextLine(); in = new File(nomfichier); inlength = in.length(); inf = new FileInputStream(in); ouf = new FileOutputStream(tmp); inc = inf.getChannel(); ouc = ouf.getChannel(); inmap = inc.map(FileChannel.MapMode.READ_ONLY, 0, inlength); codein = Charset.forName(bsh.args[0]).newDecoder(); cbin = codein.decode(inmap); codeout = Charset.forName(bsh.args[1]).newEncoder(); cout = codeout.encode(cbin); ouc.write(cout); inc.close(); ouc.close(); // remplacement de l'original par le nouveau tmp = new File(tmp.getCanonicalPath()); oufori = new FileOutputStream(in); inftmp = new FileInputStream(tmp); oucori = oufori.getChannel(); inctmp = inftmp.getChannel(); oucori.transferFrom(inctmp, 0, tmp.length()); oucori.close(); inctmp.close(); print("+ "+nomfichier+" fait."); }
Par exemple :
Ainsi je conserve la souplesse des commandes unix pour désigner des fichiers, et pour le traitement, je le fais avec ce que je sais utiliser. La commande file me confirme que l'encodage du fichier a bien changé.echo -e "Source1.java\nSource2.java" | codeconv.bsh ISO-8859-1 UTF-8
Et pour les améliorations, au moins, je serai nettement plus à l'aise !
Merci pour ton aide.
Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.
Arf, Koff, kofff
l'usine a gaz pour si peut ..........
je comprend mieux le besoin de puissance demusurée : un petrolier pour transporter un verre d'eau
soit…Envoyé par gifffftane
mais vous n'avez pas tenu compte de la remarque
"notez qu'il serait prudent de gérer les erreurs au cas où la conversion ne serait pas correcte"
si le fichier source n'est pas converti correctement vous le remplacez quand même par le fichier temporaire… : attention à vos données originales…
dans votre cas, examinez la documentation de decode et encode et vérifiez ce qui se passe en cas d'échec de conversion…
Ah je vois que ceux qui se lèvent pour Danette sont toujours là, tant mieux pour eux.
Pour ce qui est de la gestion des erreurs, vous avez tout à fait raison. Mais comme on dit, It's a work in progress. D'autant qu'il y a de quoi s'inquieter, puisque j'efface le fichier d'origine ; je vais peut être modifier le code de façon à le sauvegarder d'une façon ou d'une autre, ou bien trouver le moyen de vérifier l'encodage d'origine (pour moi le principal risque est que je me trompe d'encodage d'origine)...
À bientôt.
Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager