#1 Le 27/10/2007, à 16:50
- cedricbmx
sed, bash et encodage UTF8 vs iso8859-15
J'ai plusieurs scripts qui me servent pour faire mes pages web, mon logiciel de comptes perso, etc..
Je suis passé d'un vielle mandrivia à la toute nouvelle version d'ubuntu (Octobre 2007)
J'ai développé ça en bash (tapez pas mais le shell est mon langage de prédilection)
Inévitablement je suis tombé sur les problèmes d'encodage iso8859-15 (celui de la mandrivia) contre maintenant UTF8, largement traités sur d'autre partie du forum
Dans Mes fichiers de données mes accents sont iso8859-15
Avec kate, j'édite un de mes shell qui me crée un soucis, la aussi je configure kate en iso8859-15 et je voit:
sed 's/[éè]/e/g'
Le hic c'est que lorsque que je l'execute il ne fait plus la substitution
Pire il se trouve que si le flux d'entrée est en iso8859-15, le script écrit iso8859-15, le sed ne fltre pas mes accents et mes noms de fichiers sont générés avec accents en UTF8!!! (semble-t-il)
Que fait bash lorsqu'il interprète sed 's/[éè]/e/g' quel encodage prend-il pour les accents et comment indiquer à bash (ou a sed) que le flux de données est dans tel encodage et que dans la syntaxe c'est tel encodage?
Dernière modification par cedricbmx (Le 27/10/2007, à 17:06)
http://normandiebmx.winnerforum.net/
http://lavenirdubmx.exprimetoi.net/
http://bmxfrance.free.fr/cedr/bicross/
Hors ligne
#2 Le 27/10/2007, à 19:35
- s@mson
Re : sed, bash et encodage UTF8 vs iso8859-15
Salut Cedricbmx
peut être les classes d'équivalence pourrait servir a qqch, genre:
sed 's/[[=e=]]/e/g'
mais je crois que c'est plus pour les langues que pour les encodages.
ou alors reencoder tous tes fichiers de données et de scripts avec :
sudo apt-get install recode
recode ISO8859-15..UTF8 mon_fichier
Je continue à réfléchir...
Dernière modification par s@mson (Le 27/10/2007, à 19:41)
Hors ligne
#3 Le 08/12/2007, à 11:41
- cedricbmx
Re : sed, bash et encodage UTF8 vs iso8859-15
Salut Cedricbmx
peut être les classes d'équivalence pourrait servir a qqch, genre:
sed 's/[[=e=]]/e/g'
C'est pas mieux
J'ai finalement choisi de migrer petit à petit en UTF-8
l' inconvénient de recode c'est qu'il ne détecte pas au préalable comment le fichier est déjà encodé notamment utf-8 vers utf-8 donne un mauvais résultat. Mais il a beacoup d'option, il suffira peut être seulement de trouver la bonne
la commande file permet de connaitre l'encodage de certains fichiers:
ficlub.txt: UTF-8 Unicode text
ficlub.txt.coupe: ISO-8859 text
ficptsclubs.txt: ASCII text
mais pas tous
maj_administratif.sh: POSIX shell script text executable
participation.sh: Korn shell script text executable
recherche_pilote.pl: perl script text executable
Donc pour tout ce qui est programme, je suis obligé de les éditer avec kate pour savoir si ils sont en UTf-8 ou ISO-8859
http://normandiebmx.winnerforum.net/
http://lavenirdubmx.exprimetoi.net/
http://bmxfrance.free.fr/cedr/bicross/
Hors ligne
#4 Le 08/12/2007, à 18:02
- cedricbmx
Re : sed, bash et encodage UTF8 vs iso8859-15
Voici un p'tit shell qui à l'aire de bien fonctionner pour recoder entièrement le contenu de tous les fichiers d'un dossier passé en argument:
#!/bin/bash
# outils pour transformer le contenu des fichiers d'un dossier en UTF-8 s'il ne le sont pas
REP=$1
MOI=$0
rm -f /tmp/$MOI.* 2>/dev/null
file $REP/* | sed 's/: */:/g' | grep text | grep -v "ML document"| grep -v "UTF-8 Unicode text" > /tmp/$MOI.bdd
grep "ISO-8859 text" /tmp/$MOI.bdd > /tmp/$MOI.iso8859
grep -v "ISO-8859 text" /tmp/$MOI.bdd | cut -d":" -f1 > /tmp/$MOI.bdd.tmp
echo "entre dans la boucle1"
cat /tmp/$MOI.bdd.tmp | while read FIC
do
tail -`expr \`cat $FIC |wc -l\` - 1` $FIC > /tmp/$MOI.tmp
echo $FIC
file /tmp/$MOI.tmp
TYPE=`file /tmp/$MOI.tmp | sed 's/: */:/g'| cut -d: -f2`
if [ "$TYPE" = "ISO-8859 text" ]
then
echo "$FIC:ISO-8859 text" >> /tmp/$MOI.iso8859
fi
done
echo "entre dans la boucle2"
cut -d":" -f1 /tmp/$MOI.iso8859 | while read FIC
do
echo recode $FIC
recode iso8859-15..utf8 $FIC
done
rm -f /tmp/$MOI.* 2>/dev/null
http://normandiebmx.winnerforum.net/
http://lavenirdubmx.exprimetoi.net/
http://bmxfrance.free.fr/cedr/bicross/
Hors ligne