Pages : 1
#1 Le 15/11/2012, à 09:44
- adryen31
Iconv UTF-8 sans bom
Bonjour tout le monde,
voilà mon soucis j'ai une arborescence de 1975 dossiers/fichiers à convertir en UTF-8 sans bom
s'ils ne le sont pas déjà. Hors j'ai réalisé ce petit script, pour info je le lance avec cygwin (et oui
malheureusement les fichiers sont sur un windob ...).
#!/bin/bash
FROM=iso-8859-1
TO=UTF-8
ICONV="iconv -f $FROM -t $TO"
# Convert
find Nouveau/ -type f -name "*" | while read fn;
do
cp ${fn} ${fn}.bak
$ICONV < ${fn}.bak > ${fn}
rm ${fn}.bak
cp ${fn} ${fn}.bak
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' < ${fn}.bak > ${fn}
done
Pensez-vous que cela face correctement ce que je veux ? Car de plus en le lançant j'ai l'erreur
suivante:
ToUtf82.txt: line 13: Erreur de syntaxe près du symbole inattendu « done »
ToUtf82.txt: line 13: `done'
Désolé pour mon incompétence en script, mais c'est mon premier donc commencer un script
avec du awk, iconv, et du cygwin ... je misère un peu
Merci beaucoup en tout cas.
Adryen 31
Hors ligne
#2 Le 15/11/2012, à 10:17
- pingouinux
Re : Iconv UTF-8 sans bom
Bonjour,
Je n'arrive pas à reproduire ton erreur.
Il faut mettre les noms de fichiers entre " ", au cas où ils contiendraient des espaces.
Ton script peut se simplifier comme ceci :
#!/bin/bash
FROM=iso-8859-1
TO=UTF-8
ICONV="iconv -f $FROM -t $TO"
# Convert
find Nouveau -type f | while read fn;
do
$ICONV "$fn" > "$fn".bak
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' "$fn".bak > "$fn"
done
Édité : Orthographe
Dernière modification par pingouinux (Le 19/11/2012, à 08:42)
Hors ligne
#3 Le 15/11/2012, à 10:23
- adryen31
Re : Iconv UTF-8 sans bom
Merci beaucoup super, par contre même problème maintenant
$ sh ToUtf82.sh
ToUtf82.sh: line 10: Erreur de syntaxe près du symbole inattendu « done »
ToUtf82.sh: line 10: `done'
Peut-être qui faut un truc a la fin du fichier pour cygwin ...
Hors ligne
#4 Le 15/11/2012, à 10:34
- pingouinux
Re : Iconv UTF-8 sans bom
Ton script est un fichier bash, il vaut mieux ne pas le lancer avec sh.
/chemin_du_script/ToUtf82.sh
Même en le lançant avec sh, je ne reproduis pas l'erreur. As-tu des fichiers avec des noms exotiques ?
Hors ligne
#5 Le 15/11/2012, à 10:37
- adryen31
Re : Iconv UTF-8 sans bom
ok j'ai trouvé :
his is a common error and the reason is your are using Windows to create the file. Thus the line break is \r\n rather than \n.
All you need to do is change the format using a system command:
dos2unix filename_here
^^ je regarde du coup le resultat
Hors ligne
#6 Le 15/11/2012, à 10:49
- adryen31
Re : Iconv UTF-8 sans bom
arf mince j'ai essayé avec le rm mais cela ne fonctionne pas de supprimer le .bak
#!/bin/bash
FROM=iso-8859-1
TO=UTF-8
ICONV="iconv -f $FROM -t $TO"
# Convert
find Nouveau -type f | while read fn;
do
$ICONV "$fn" > "$fn".bak
awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}' "$fn".bak > "$fn"
rm "$fn".bak
done
Hors ligne
#7 Le 15/11/2012, à 10:52
- adryen31
Re : Iconv UTF-8 sans bom
Si autant pour moi je n'avais pas recompilé avec dos2unix
Merci beaucoup
Hors ligne
#8 Le 15/11/2012, à 10:57
- adryen31
Re : Iconv UTF-8 sans bom
arf non mes fichier sont converti en :
$ file -i *
AddWorkflowToSessionAction.java: text/plain; charset=us-ascii
GenerateWorkflowGraphAction.java: text/plain; charset=us-ascii
GetWorkflowGraphAction.java: text/plain; charset=us-ascii
GetWorkflowInitializerDataAction.java: text/plain; charset=us-ascii
GetWorkflowListOfExtFobFieldsAction.java: text/plain; charset=us-ascii
GetWorkflowListOfStatusAction.java: text/plain; charset=us-ascii
GetWorkflowStatusAction.java: text/plain; charset=us-ascii
même pas utf-8
Hors ligne
#9 Le 15/11/2012, à 11:07
- pingouinux
Re : Iconv UTF-8 sans bom
Pour avoir la liste des codages de caractères :
iconv -l
Il semblerait que ce ne soit pas iso-8859-1, mais ISO-8859-1.
Sinon, je peux tester sur un de tes fichiers, s'il est petit et non confidentiel.
Hors ligne
#10 Le 15/11/2012, à 11:30
- adryen31
Re : Iconv UTF-8 sans bom
mince il y a pas moyen de lui faire prendre les 2 ... car j'ai du us-ascii en plus
Hors ligne
#11 Le 15/11/2012, à 11:52
- pingouinux
Re : Iconv UTF-8 sans bom
Tu peux éventuellement récupérer le codage du fichier dans la boucle :
FROM=$(file -bi "$fn" | sed 's/^.*=//')
FROM="${FROM^^}" # Pour tout mettre en majuscules
Hors ligne
#12 Le 15/11/2012, à 12:55
- adryen31
Re : Iconv UTF-8 sans bom
Super, sauf qu'il chope un :
SyncSource.java: text/plain; charset=unknown-8bit
SyncUser.java: text/plain; charset=iso-8859-1
Task.java: text/plain; charset=unknown-8bit
UserAlreadySynchronizingException.java: text/plain; charset=iso-8859-1
et pour le unknown-8bit il plante et me file de fichier ... grrr
Hors ligne
#13 Le 15/11/2012, à 13:53
- pingouinux
Re : Iconv UTF-8 sans bom
Dans la boucle, après avoir calculé FROM pour le fichier, tu peux sauter le traitement si l'encodage ne convient pas :
[[ ( $FROM != "ISO-8859-1" ) && ( $FROM != "US-ASCII" ) ]] && continue
Hors ligne
Pages : 1