Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

s@mson a écrit :

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