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 05/11/2014, à 09:54

L'Africain

(résolu) conversion récursive de pages html en utf-8

Bonjour,
Je souhaiterais écrire un petit script qui :
1.transformerait récursivement des pages htm encodées en windows-1252 en page htm utf-8. La commande iconv fonctionne bien mais seulement si on met un fichier de sortie. J'ai la contrainte que mon fichier de sortie doit avoir le même nom que le fichier d'entrée. Ça ça marche sur un fichier:

iconv -f WINDOWS-1252 -t UTF-8 texte1.htm > texte2.htm

mais j'arrive pas à l'appliquer en boucle, ni récursivement.
(En tenant compte que certaines pages ne sont déjà en utf-8). sed pourrait peut-être aussi fonctionner?
2.Puis ensuite je dois changer tous les mauvais caractères en bons caractères :
é en é
î e î
è en è
ça aussi récursivement sur les mêmes fichiers htm.
j'ai essayé avec sed:

sed -e 's/é/é/g' text1.htm

mais je m'en sort pas... Surtout pour les boucles...
Si quelqu'un à une idée. Pour infos j'ai une grosse documentation hors-ligne réalisé autrefois sous Windows et je voudrais en faire un zim pour Kiwix. Merci pour votre aide.
Amicalement, L'Africain

Dernière modification par L'Africain (Le 10/11/2014, à 14:01)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#2 Le 05/11/2014, à 10:01

jplemoine

Re : (résolu) conversion récursive de pages html en utf-8

pourquoi ne pas en profiter pour coder les caractères en "mode html" :
é --> é
à --> à
...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 05/11/2014, à 10:16

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Je comprends pas? é en html s'écrit &eacute?
Mais faudrait d'abord je j'arrive à faire le reste...


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#4 Le 05/11/2014, à 10:21

jplemoine

Re : (résolu) conversion récursive de pages html en utf-8

En html, normalement, les caractères spéciaux sont "encodés". Il y en a plein : je ne t'en ai donné que 2 pour l'exemple.
C'est sous la forme : & + code + ; (point virgule).
Le code est soit le code ascii, soit un code avec des lettres
Donc, é c'est é (tu as oublié le point virgule à la fin).
tu peux voir sur cette page pour plus de détail...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#5 Le 05/11/2014, à 10:21

jplemoine

Re : (résolu) conversion récursive de pages html en utf-8

Si tu encodes sous cette forme, ta problématique ne sera plus d'actualité.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#6 Le 05/11/2014, à 10:57

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

ok si j'encode avec iconv en ascii je n'aurais pas le problème des caractères bizarres. Je vais essayer, reste à le faire de façon récursive.
merci déjà pour ça.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#7 Le 05/11/2014, à 10:57

bruno

Re : (résolu) conversion récursive de pages html en utf-8

Bonjour,

Tout d'abord l'encodage des caractères sous formes d'entités (représentation de à par à par exemple) dans les fichiers HTML n'est absolument pas obligatoire. Cela permet d'avoir un affichage correct des différents caractères même en cas d'incohérence entre le jeux de caractères déclaré dans la balise meta et celui effectivement utilisé à l'enregistrement du fichier. Personnellement je déconseille l'emploi systématique des entités pour des raison de poids de fichier et de réutilisation du code par d'autres applications entre autres.


Ensuite il faudrait que tu nous montres l'un de tes fichiers html.

Pour que ta commande fonctionne, il faut que :
- le fichier d'origine ait bien été enregistré avec l'encodage windows-1252, ton éditeur de texte doit pouvoir te le dire ;
- que la balise <meta charset="windows-1252"> soit changée en <meta charset="utf-8"> (C'est du HTML5 le code est légèrement différent en XHTML).

Ce que tu appelle des mauvais caractère c'est typique d'un affichage en iso8859-1 (ou windows-1252) d'un fichier enregistré en utf-8. Je suppose donc que tu as un problème avec la déclaration du jeu de caractère dans les balises meta.


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#8 Le 05/11/2014, à 11:03

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

ok si j'encode avec iconv en ascii je n'aurais pas le problème des caractères bizarres. Je vais essayer, reste à le faire de façon récursive.
merci déjà pour ça.
Edit :
Ça donne ça:

iconv -f WINDOWS-1252 -t ASCII mon_text.htm >test.htm
iconv: séquence d'échappement non permise à la position 587

Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#9 Le 05/11/2014, à 11:34

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Le fichier htm est bien encodé en : windows-1252
Voici la ligne lorsque je l’ouvre avec gedit : <meta http-equiv="Content-Type"
content="text/html; charset=windows-1252">
Pour les mauvais caractères, en effet c'est bien lorsque j'ai ouvert le fichier converti en UTF-8, que les "mauvais" caractères apparaissent.
Edit :
Je viens de comprendre un truc. Dans ma page html convertie en utf-8 le problème est dans l'affichage uniquement, c'est pour ça que sed ne marche pas, il n'y a pas de mauvais caractères dans l'éditeur de texte.
J'ai fait un sed direct sur fichier htm:

sed -i "s/windows-1252/UTF-8/g" GraphoN_index.htm

Il change bien en utf-8, mais alors le navigateur affiche des ? dans un carré, à la place des caractères bizarres...


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#10 Le 05/11/2014, à 12:28

bruno

Re : (résolu) conversion récursive de pages html en utf-8

Ça par contre c'est typique d'un fichier enregistré en windows-1252 et déclarant un jeu de caractère UTF-8 dans la balise meta. Je pense donc que tu a changé la balise meta charset mais que tu n'as pas converti ton fichier en utf-8…

Il faut changer le meta avec ta commande sed et utiliser iconv pour convertir le fichier en utf-8.


Attention, les bouteilles vendues par Nestlé Waters sont contaminées au monoxyde de dihydrogène.

Hors ligne

#11 Le 05/11/2014, à 14:08

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Oui ça a marché! D'abord sed puis iconv. Merci beaucoup!
Maintenant reste plus qu'à automatiser ça pour plus de 5 gigas de fichiers htm...


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#12 Le 05/11/2014, à 14:40

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Voilà où j'en suis

# Modification du charset avec sed
for i in *.htm
do
     sed -i "s/windows-1252/UTF-8/g" "$i"; 
iconv -f WINDOWS-1252 -t UTF-8 "$i" > "$i";

done

La commande iconv ça marche pas, le fichier de sortie est vide. Si je mets pas de chevron de sortie ça marche pas non plus. Enfin je sais pas comment faire ça récursivement...
Edit pour la récursivité c'est ok du côté de sed:

find . -name "*.htm" -exec sed -i 's/windows-1252/UTF-8/g' {} \;

Il me reste à le faire du côté de iconv.

Dernière modification par L'Africain (Le 06/11/2014, à 10:24)


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#13 Le 06/11/2014, à 12:23

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Voilà où j'en suis, j'ai réussi la conversion de façon récursive avec les fichiers htm:

#!/bin/bash
# Modification du charset avec sed
find . -name "*.htm" -exec sed -i 's/windows-1252/UTF-8/g' {} \;

find . -name "*.html" -exec sed -i 's/iso-8859-1/UTF-8/g' {} \;

#conversion des fichiers vers utf8 et renommage en .utf8
find -name \*.htm -type f | \
    (while read file; do
        iconv -f windows-1252 -t UTF8 "$file" > "${file%.htm}.utf8";
    done);
#find -name \*.html -type f | \
 #   (while read file; do
  #      iconv -f iso-8859-1 -t UTF8 "$file" > "${file%.html}.utf8b";
 #   done);
#Suppression des fichiers .htm
find . -name "*.htm" -exec rm -f {} \; 
#find . -name "*.html" -exec rm -f {} \; 
#Renommage des fichiers utf8 en htm
find . -name "*utf8" -exec rename 's/utf8/htm/g' {} \; 
#find . -name "*utf8b" -exec rename 's/utf8b/html/g' {} \; 

Mais voilà que j'ai découvert que certains fichier html sont en iso-8859-1 ou aussi en windows-1252, alors comment appliquer ce script uniquement aux fichiers html qui ne sont pas encore en utf8. Je l'ai appliqué à tous les fichiers et la lecture de ceux qui étaient déjà en utf8 est mauvaise (caractères bizarres).
Merci de votre aide.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#14 Le 09/11/2014, à 22:00

bobe

Re : (résolu) conversion récursive de pages html en utf-8

regarde du côté de la commande file. Exemple :

res=`file --mime-encoding "$filename" | grep -vi 'utf-8'`
if [ "$res" != '' ]; then
	# conversion
fi

Hors ligne

#15 Le 09/11/2014, à 23:09

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Merci, mais je comprends pas bien. Je sais que dois utiliser if mais les autres commandes tu veux bien me les expliquer ? Après le then je dois mettre la commande sed puis iconv c'est çà ?


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#16 Le 10/11/2014, à 00:15

bobe

Re : (résolu) conversion récursive de pages html en utf-8

À tester avant parce que je l'ai juste tapé mais pas testé :

#!/bin/bash

find -type f \( -name "*.html" -o -name "*.htm" \) | while read f
do
	res=`file --mime-encoding "$f" | grep -vi 'utf-8'`
	if [ "$res" == "" ]; then
		continue
	fi

	echo "Convert $f to utf-8..."

	sed -i 's/windows-1252/UTF-8/I' "$f"
	sed -i 's/iso-8859-1/UTF-8/I' "$f"
	
	cp -p "$f" "$f.original"
	iconv -f windows-1252 -t UTF-8 "$f.original" > "$f";
done

Une fois que c'est bon, un nettoyage avec la commande suivante :

find -type f -name "*.original" -delete

Dernière modification par bobe (Le 10/11/2014, à 00:16)

Hors ligne

#17 Le 10/11/2014, à 13:59

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Je te remercie !
Ça marche parfaitement!
Peux-tu m'expliquer çà :

while read f
do
	res=`file --mime-encoding "$f" | grep -vi 'utf-8'`
	if [ "$res" == "" ]; then
		continue
	fi

	echo "Convert $f to utf-8..."

Les autres commandes je comprends. Mais si je comprends les autres je pourrais me débrouiller tout seul la prochaine fois.
Merci pour votre aide.


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne

#18 Le 10/11/2014, à 16:07

bobe

Re : (résolu) conversion récursive de pages html en utf-8

On exécute la commande « file --mime-encoding nom.du.fichier | grep -vi 'utf-8' » et on récupère le résultat dans la variable 'res'.
On a filtré avec grep sur la chaîne "utf-8" donc seuls les fichiers non-utf-8 donneront une variable 'res' non vide.

grep: v pour inverser la recherche et ne pas retourner les lignes contenant le masque recherché, i pour prendre aussi bien utf-8 que UTF-8
Pour la commande file, teste là directement en ligne de commande : file --mime-encoding fichier

Si ce sont les accents (backtick) qui te gènent, ils permettent simplement d'exécuter une suite de commandes et de récupérer la sortie dans une variable. Voir par exemple ici : http://stackoverflow.com/questions/4708 … nd-command

Hors ligne

#19 Le 10/11/2014, à 20:59

L'Africain

Re : (résolu) conversion récursive de pages html en utf-8

Merci!


Ubuntu-Unity 18.04 LDLC (clevo) X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42

Hors ligne