cerhu > comp.divers.* > comp.infosystemes.www.auteurs

docanski (03/06/2019, 13h13)
Bonjour,

(voilà longtemps que je ne me suis plus exprimé ici ...)
Problème rencontré depuis quelques mois avec quelques pages mises à jour
dont l'affichage a changé malgré un "doctype" toujours identique.
Voici un exemple : [..] et la page
d'accueil [..] pourtant mises à jour de la même
façon et avec le même éditeur. Il s'agit de gedit sous l'OS Debian Stretch.
Mousepad refuse d'afficher les codes source sous prétexte qu'il ne
s'agit pas d'un format UTF8 valide ...
Quelqu'un peut m'expliquer ... et surtout me dépanner ?

Cordialement,
Sergio (03/06/2019, 13h51)
Le 03/06/2019 à 13:13, docanski a écrit :
> Bonjour,
> (voilà longtemps que je ne me suis plus exprimé ici ...)
> Problème rencontré depuis quelques mois avec quelques pages mises à jour dont l'affichage a changé malgré un "doctype" toujours identique.
> Voici un exemple : [..] et la page d'accueil [..] pourtant mises à jour de la même façon et avec le même éditeur. Il s'agit de gedit sous l'OS
> Debian Stretch.
> Mousepad refuse d'afficher les codes source sous prétexte qu'il ne s'agit pas d'un format UTF8 valide ...
> Quelqu'un peut m'expliquer ... et surtout me dépanner ?
> Cordialement,


Pour les deux pages, il y a :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Donc pas de lézard, il faut que ce soit du 8859-1. Or si la page principale semble bien encodé en 8859-1, la page dinan5.htm est visiblement encodée en UTF-8.

AMHA, pour éviter les emmerdes, passe tout en UTF-8 avec "iconv" :

iconv -f iso-8859-1 -t utf-8 fichier-8859.html > ficher-utf8.html

Pour déterminer vite fait l'encodage d'un ficher, l'utilitaire "file" le déterminera.

Tu peux te faire un petit script pour automatiser tout ça...
Otomatic (03/06/2019, 14h59)
docanski <docanski> écrivait :

> Voici un exemple : [..] et la page La page est déclarée iso-8859-1 :
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

mais le contenu est codé utf-8.
docanski (03/06/2019, 16h01)
Otomatic a écrit le 03/06/2019 à 14:59 :
> docanski <docanski> écrivait :
>> Voici un exemple : [..] et la page

> La page est déclarée iso-8859-1 :
>> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

> mais le contenu est codé utf-8.


Comment a-t'il pu être codé en UTF-8 alors qu'il ne s'agissait que de la
correction de quelques lignes qui avait été écrites dans la page
d'origine en iso-8859-1, correction faite sans modifier ces
caractéristiques d'encodage ? Apparemment, Gedit enregistre
automatiquement en UTF-8, essai effectué sur d'autres pages. :-( Et
comment en revenir alors à afficher en iso ? Ni Gedit ni Mousepad ne me
le permettent.
docanski (03/06/2019, 16h06)
Sergio a écrit le 03/06/2019 à 13:51 :

> Pour les deux pages, il y a :
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
> Donc pas de lézard, il faut que ce soit du 8859-1. Or si la page
> principale semble bien encodé en 8859-1, la page dinan5.htm est
> visiblement encodée en UTF-8.


Visiblement ? Impossible à vérifier avec Gedit qui m'a servi pour éditer
cette page. D'autre part, il n'y a eu que correction de quelques lignes
dans dinan5.htm et simplement la date de mise à jour dans index.htm avec
le même éditeur.
Or la première est mal affichée et la seconde s'affiche correctement.

> AMHA, pour éviter les emmerdes, passe tout en UTF-8 avec "iconv" :
> iconv -f iso-8859-1 -t utf-8 fichier-8859.html > ficher-utf8.html


Heu ... je préfère éviter : j'ai des centaines de pages dans plusieurs
sites éditées dans les mêmes conditions depuis des années. Ce que je
veux, c'est en revenir à l'encodage original.
Olivier Miakinen (03/06/2019, 16h15)
Le 03/06/2019 16:01, docanski a écrit :
>>> Voici un exemple : [..] et la page

>> La page est déclarée iso-8859-1 :
>>> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

>> mais le contenu est codé utf-8.


Je le confirme.

> Comment a-t'il pu être codé en UTF-8 alors qu'il ne s'agissait que de la
> correction de quelques lignes qui avait été écrites dans la page
> d'origine en iso-8859-1, correction faite sans modifier ces
> caractéristiques d'encodage ? Apparemment, Gedit enregistre
> automatiquement en UTF-8, essai effectué sur d'autres pages. :-(


La question concernant Gedit sera en charte sur le groupe traitant
des éditeurs de texte : fr.comp.applications.editeurs-de-texte

> Et
> comment en revenir alors à afficher en iso ? Ni Gedit ni Mousepad ne me
> le permettent.


iconv -f UTF-8 -t ISO-8859-1
Otomatic (03/06/2019, 16h50)
docanski <docanski> écrivait :

> Heu ... je préfère éviter : j'ai des centaines de pages dans plusieurs
> sites éditées dans les mêmes conditions depuis des années. Ce que je
> veux, c'est en revenir à l'encodage original.

Depuis PHP 5.6, le jeu de caractères par défaut est utf-8 et, avec PHP
7.2/3 il se peut que, selon les hébergeurs, une entête :
header("content-type:text/html; charset=utf-8");
soit automatiquement envoyée sans demander l'avis de l'hébergé.
Or, cette entête PHP est prioritaire sur les balises <meta...> ce qui
fait que le jeu de caractère utilisé sera utf-8 avec des contenus codés
iso-8859-1. C'est déjà le cas avec le(s) serveurs test PHP 7 chez Free.

AMHA, pour éviter des problèmes futurs (Qui viennent de commencer avec
un éditeur de texte qui transcode et sauve en utf-8) il serait bien de
passer un peu de temps à passer toutes les pages en utf-8.

Pour tous les fichiers d'un dossier, même sur plusieurs niveaux, ce doit
être assez simple sous Linux, je l'ai bien fait sous Windows avec
UtraEdit et un script pour 9589 fichiers dans 897 dossiers sur quatre
niveaux.
Olivier Miakinen (03/06/2019, 16h54)
Le 03/06/2019 16:50, Otomatic a écrit :
> Depuis PHP 5.6, le jeu de caractères par défaut est utf-8 et, avec PHP
> 7.2/3 il se peut que, selon les hébergeurs, une entête :
> header("content-type:text/html; charset=utf-8");
> soit automatiquement envoyée sans demander l'avis de l'hébergé.
> Or, cette entête PHP est prioritaire sur les balises <meta...> ce qui
> fait que le jeu de caractère utilisé sera utf-8 avec des contenus codés
> iso-8859-1. C'est déjà le cas avec le(s) serveurs test PHP 7 chez Free.
> AMHA, pour éviter des problèmes futurs (Qui viennent de commencer avec
> un éditeur de texte qui transcode et sauve en utf-8) il serait bien de
> passer un peu de temps à passer toutes les pages en utf-8.


Oui à tout.

> Pour tous les fichiers d'un dossier, même sur plusieurs niveaux, ce doit
> être assez simple sous Linux, je l'ai bien fait sous Windows avec
> UtraEdit et un script pour 9589 fichiers dans 897 dossiers sur quatre
> niveaux.


Oui :
'find' + 'iconv -f ISO-8859-1 -t UTF-8'
docanski (03/06/2019, 17h08)
Olivier Miakinen a écrit le 03/06/2019 à 16:54 :

>> Pour tous les fichiers d'un dossier, même sur plusieurs niveaux, ce doit
>> être assez simple sous Linux, je l'ai bien fait sous Windows avec
>> UtraEdit et un script pour 9589 fichiers dans 897 dossiers sur quatre
>> niveaux.

> Oui :
> 'find' + 'iconv -f ISO-8859-1 -t UTF-8'


Je ne suis vraiment pas fan de la commande en ligne mais si cette
commande permet de corriger la totalité d'un dossier, je suis preneur.
Encore faut-il savoir comment s'en servir : à partir de chaque dossier ?
à l'intérieur de chaque dossier contenant les pages ? Elle me paraît
simpliste pour remplacer l'en-tête complète de toutes les pages ou
faudra-t'il le faire pour chacune à la mimine ?
Toujours est-il que j'ai remplacé l'ancienne en-tête de la page
incriminée par un
[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"
dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[/code]
.... et cela roule évidemment.
Il me reste cet étonnement : la page index n'a pas eu le même problème
que celle-là !
docanski (03/06/2019, 17h20)
docanski a écrit le 03/06/2019 à 17:08 :

>>   'find' + 'iconv -f ISO-8859-1 -t UTF-8'

> Je ne suis vraiment pas fan de la commande en ligne mais si cette
> commande permet de corriger la totalité d'un dossier, je suis preneur.


J'ai essayé à l'intérieur d'un dossier comportant ce genre de pages :
aucune réaction, la console de commande est muette.
Denis Beauregard (03/06/2019, 18h01)
Le Mon, 3 Jun 2019 17:20:39 +0200, docanski
<docanski> écrivait dans
fr.comp.infosystemes.[..]

>docanski a écrit le 03/06/2019 à 17:08 :
>>>   'find' + 'iconv -f ISO-8859-1 -t UTF-8'

>> Je ne suis vraiment pas fan de la commande en ligne mais si cette
>> commande permet de corriger la totalité d'un dossier, je suis preneur.

>J'ai essayé à l'intérieur d'un dossier comportant ce genre de pages :
>aucune réaction, la console de commande est muette.


J'ai souvent des soucis avec ces commandes qui touchent un dossier
au complet. Ma solution: passer par un chiffrier !

Mon problème personnel est de renommer des fichiers, mais on peut
adapter à ton besoin !

toto.jpeg
toto.jpg
="ren "&a1&" "&b1

Et je copie la colonne C vers la console. Dans ton cas, une sauvegarde
est préférable.

Denis
Sergio (03/06/2019, 18h05)
Le 03/06/2019 à 17:20, docanski a écrit :
> docanski a écrit le 03/06/2019 à 17:08 :
>>>   'find' + 'iconv -f ISO-8859-1 -t UTF-8'

>> Je ne suis vraiment pas fan de la commande en ligne mais si cette commande permet de corriger la totalité d'un dossier, je suis preneur.

> J'ai essayé à l'intérieur d'un dossier comportant ce genre de pages : aucune réaction, la console de commande est muette.


Ce n'est pas une commande, c'est les commandes à utiliser dans le script. Soit :
"find" (pour avoir la liste des fichiers) et "iconv -f ISO-8859-1 -t UTF-8" pour les convertir.

Je rajouterais aussi "file" pour voir en quoi ils sont encodés (ISO 8859, UTF-8....) et lancer la bonne conversion.

On en va pas t'écrire le script, faut un peu que tu y mettes du tien !
Otomatic (03/06/2019, 18h40)
docanski <docanski> écrivait :

> Elle me paraît
> simpliste pour remplacer l'en-tête complète de toutes les pages ou
> faudra-t'il le faire pour chacune à la mimine ?

Nous en arrivons aux problèmes de conception des pages d'un site.
Chez moi ? qui n'est pas forcément un modèle du genre ? quelle que soit
la page, son affichage ?html? commence par :

include('inc/entete.php');

ce qui fait que les entêtes php et html ne sont éventuellement à
modifier qu'une seule fois.

Et si, par exemple, pour une page particulière, je ne veux pas d'utf-8
par défaut, il suffit, avant la ligne include, de déclarer :

$charset = 'iso-8859-1';

et de même avec d'autres variables comme les css à charger, les
éventuels scripts js ou le doctype.

De plus, après ?exécution? de l'include, la connexion à la base de
données est effective et les fonctions php principales sont chargées.

Mais... ça, je l'ai pensé il y a largement plus de dix ans.
Olivier Miakinen (03/06/2019, 23h38)
Le 03/06/2019 18:05, Sergio répondait à docanski :
>>> Je ne suis vraiment pas fan de la commande en ligne [...]

> On [ne] va pas t'écrire le script, faut un peu que tu y mettes du tien !


Bah, tu n'es guère charitable envers quelqu'un qui, bien qu'utilisant
Linux, dit qu'il n'est pas fan des commandes en ligne !

Je vais te faire ça, docanski, ça ne va pas être compliqué, et ça
pourrait te donner envie de t'intéresser un peu plus aux lignes de
commande et aux scripts.
Olivier Miakinen (04/06/2019, 00h05)
Le 03/06/2019 16:06, docanski a écrit :
>> AMHA, pour éviter les emmerdes, passe tout en UTF-8 avec "iconv" :
>> iconv -f iso-8859-1 -t utf-8 fichier-8859.html > ficher-utf8.html

> Heu ... je préfère éviter : j'ai des centaines de pages dans plusieurs
> sites éditées dans les mêmes conditions depuis des années. Ce que je
> veux, c'est en revenir à l'encodage original.


Bon. Alors on va y aller progressivement.

Tout d'abord, pour être sûr de ne rien casser, je te conseille de
faire une copie de sauvegarde de l'arborescence de ton site.
Tu peux d'ailleurs faire une copie intégrale de l'arborescence dans
un répertoire séparé, puis faire les modifications dans la copie,
pour être sûr de ne pas toucher à l'arborescence de base tant que
tu n'as pas confiance que ça marche.

Va ensuite à la racine du site (ou de sa copie), et crée le fichier
suivant que tu peux nommer « conv » :
################################################## #################
printf "Conversion de %s\n" "$1"
if grep -F 'iso-8859-1' "$1" > /dev/null && ! grep -F 'utf-8' "$1" > /dev/null
then
printf "\tCharset iso-8859-1, on va changer le charset vers utf-8\n"
sed -i 's/iso-8859-1/utf-8/' "$1"
if grep -F 'utf-8' "$1" > /dev/null && ! grep -F 'iso-8859-1' "$1" > /dev/null
then
printf "\tCharset utf-8 OK, on va convertir\n"
if iconv -f iso-8859-1 -t utf-8 -o "$1" "$1"
then
printf "\tConversion OK\n"
else
printf "\tConversion non OK\n"
fi
else
printf "\tRemplacement du charset non OK, on ne fait rien\n"
fi
else
printf "\tCharset non iso-8859-1, on ne fait rien\n"
fi
################################################## #################

Explications de ce script :
- les 'printf' annoncent ce qu'on est en train de faire
- la première ligne avec des 'grep' vérifie que le charset annoncé
est partout iso-8859-1 et nulle part utf-8 (sinon on ne fait rien)
- la commande 'sed' remplace le charset de iso-8859-1 vers 'utf-8'
- la deuxième ligne avec des 'grep' vérifie que ça a fonctionné
(sinon on ne change rien de plus)
- si tout est OK, la ligne avec 'iconv' transforme le charset.

Tu rendras ce script exécutable avec la commande :
chmod a+x conv

Tu peux tester le script sur l'un des fichiers, par exemple dinan5.htm
s'il est à la racine du site.
./conv dinan5.htm

Ça doit t'afficher :
Conversion de dinan5.htm
Charset iso-8859-1, on va changer le charset vers utf-8
Charset utf-8 OK, on va convertir
Conversion OK

Comme la conversion a été faite, si tu relances le script une
deuxième fois ça devrait t'afficher :
Conversion de dinan5.htm
Charset non iso-8859-1, on ne fait rien

Tu es maintenant prêt à convertir toute ton arborescence. Toujours
depuis la racine de cette arborescence (ou sa copie), tu tapes la
commande :
find . -name "*.htm" -exec ./conv {} \;

Et voilà.

Discussions similaires
[mail 3] encodage texte

Creer liste texte avec un résultat texte et nom numérique

BBEdit et l'encodage texte

accent / encodage texte


Fuseau horaire GMT +2. Il est actuellement 11h52. | Privacy Policy