for file in $(find ~/www/public/. -type f); do
sed 's/ä/À/g' < $file > $file.tmp
sed 's/É/É/g' < $file > $file.tmp
sed 's/é/é/g' < $file > $file.tmp
sed 's/è/è/g' < $file > $file.tmp
sed 's/Ã/à/g' < $file > $file.tmp
sed 's/ä/ä/g' < $file > $file.tmp
sed 's/ë/ë/g' < $file > $file.tmp
sed 's/ï/ï/g' < $file > $file.tmp
sed 's/â/â/g' < $file > $file.tmp
sed 's/ê/ê/g' < $file > $file.tmp
echo $file
rm -f $file
mv $file.tmp $file
done
mais ça ne semble pas fonctionner. Quelqu'un pourrait me corriger ? (C'est le premier script shell de ma vie).
# Commentaire supprimé
Posté par Anonyme . Évalué à 5.
Ce commentaire a été supprimé par l’équipe de modération.
# et iconv ?
Posté par B. franck . Évalué à 4.
utf8->latin1, un ami m'a conseillé (à juste titre) iconv
iconv -f utf8 -t latin1 fichier
# Conversion UTF8 vers iso8859-15
Posté par JJD . Évalué à 4.
Il y a certainement plusieurs remarques à faire concernant ton script.
Tout d'abord, chaque commande sed prend ton fichier d'entrée ($file) pour convertir un caractère unique et écrire le résultat dans $file.tmp : chaque exécution de sed vient donc écraser le fichier $file.tmp précédemment écrit. Seule la dernière exécution est donc utile (autrement dit, seule la ligne
"sed 's/ê/ê/g' < $file > $file.tmp"
sert à quelque chose.
Ensuite, il faut bien savoir quelle est la locale courante en cours lorsque tu écris/visualises le script en question.
Quoi qu'il en soit, la meilleure solution pour ce type de conversion est, comme écrit dans les deux commentaires précédents, d'utiliser iconv.
Mais attention, comme tu veux apparemment convertir de l'utf8 en latin9, la bonne commande est celle de B.franck (la commande de LiNuCe fait la conversion inverse).
Je te conseille tout de même de prendre comme codage de destination du latin9 (LATIN-9 ou ISO-8859-15) plutôt que du latin1 (ou ISO-8859-1).
Evidemment, iconv ne fonctionnera que si ton fichier d'entrée est bien en UTF8. S'il y a à l'intérieur un mélange de caractère UTF8 et latin9, le résultat de la conversion avec iconv ne sera pas terrible...
A+
JJD
[^] # Re: Conversion UTF8 vers iso8859-15
Posté par evaisse . Évalué à 1.
Effectivement, Iconv ne servirait à rien ici, l'encodage spécifié est déjà bon, mais ce sont les caractères lus par PhpDocumentor en ISO (alors qu'ils étaient UTF8) qui figure dans les fichiers, ce sont donc des caractères ISO/latin.
Le problème est en fait très simple, je veux simplement remplacer les occurences de 'ê' par 'è' par exemple. C'est simple, mais comme c'est mon premier script Shell, je voulais des conseils...
Déjà merci pour vos réponses, le truc de rééffacer le fichier .tmp à chaque fois, c'est bien bête, j'avais pas vu...
[^] # Re: Conversion UTF8 vers iso8859-15
Posté par mrlem (site web personnel) . Évalué à 1.
Par rapport à ton script, je fais juste une petite remarque complémentaire (en dehors de l'histoire du fichier écrasé à chaque fois) :
sed 's/Ã/à/g' < $file > $file.tmp
sed 's/ä/ä/g' < $file > $file.tmp
Ce n'est probablement pas ce que tu veux faire : si tu remplaces tous les "Ã" par des "à", alors aucun de tes matching suivants ne fonctionnera : le "à" UTF-8 donne en ISO-88-59-1 "Ã " (note l'espace).
Mais puisque j'aime bien me répéter, iconv est ton ami.
# options sed
Posté par Colargol . Évalué à 3.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.