Discussion:
codage de sortie de la bdd (problème de débutant avec utf-8)
(trop ancien pour répondre)
.
2006-01-31 10:20:23 UTC
Permalink
Bonjour à tous.

J'arrive avec mes gros sabots d'ignare (techniquement...)pour vous
soumettre un petit problème. Mais je ne sais même pas si je frappe à la
bonne porte. (Excuses et merci de m'indiquer le "bon" chemin en cas
contraire.)

Voilà, je suis en train de refaire un site en xhtml et css et j'ai
choisi de coder en utf-8 puisque tout le monde dit que c'est l'avenir...
(J'utilise SciTE et tout va bien tant que je ne fais pas appel à la bdd)

Le site est chez free (si ça a une importance ?).
J'ai mis "utf-8" partout où j'ai pu (me semble-t-il) dans les options de
la bdd, mais tous les caractères é è à etc... de la table se retrouvent
être des ? dans ma sortie xhtml (le codage de la page est bien reconnu
comme étant du utf-8)

Bien sûr, si je mets é à etc... tout va bien mais comme
c'est un site avec beaucoup de texte j'aurais aimé une méthode moins
radicale...

D'après ce que je comprends c'est que la base de données me renvoie du
texte en ISO et non pas en UTF-8.

Si quelqu'un a une idée ?
De toute façon, merci d'être arrivé jusque là...

D.Eissart

PS: Ici un exemple:
http://quintus.horatius.free.fr/v2/affiche_chx.php?demande=1104
(les "?" sont des é à â etc.. dans la table de mySql)
Vincent Ramos
2006-01-31 22:08:04 UTC
Permalink
Post by .
(les "?" sont des é à â etc.. dans la table de mySql)
MySQL utilise plusieurs variables qui peuvent faire la différence. Voici par
exemple chez moi (session/par défaut) :
character set client utf8 utf8
character set connection utf8 utf8
character set database utf8 utf8
character set results utf8 utf8
character set server utf8 utf8
character set system utf8 utf8
collation connection utf8_general_ci utf8_general_ci
collation database utf8_general_ci utf8_general_ci
collation server utf8_general_ci utf8_general_ci

Le problème peut être le suivant : dans quel codage MySQL *envoie*-t-il ses
données aux pages ? Cela se règle, par PHPMyAdmin, par exemple, installé
chez Free.
D. Eissart
2006-02-01 07:40:53 UTC
Permalink
Le problème peut être le suivant : dans quel codage MySQL *envoie*-t-il ses
données aux pages ?
C'est bien ce que j'avais compris....

Cela se règle, par PHPMyAdmin, par exemple, installé
chez Free.
C'est bien ça que je ne sais pas faire...
(j'ai pourtant mis à la valeur utf_8 tout ce que j'ai *vu* en menus
déroulants...)

Y a-t-il des réglages "cachés" ?

(Je ne suis pas un spécialiste! Mon site est consacré à de la poésie
antique...)

D. Eissart
Vincent Ramos
2006-02-01 12:00:30 UTC
Permalink
Post by D. Eissart
Post by Vincent Ramos
Cela se règle, par PHPMyAdmin, par exemple, installé
chez Free.
C'est bien ça que je ne sais pas faire...
(j'ai pourtant mis à la valeur utf_8 tout ce que j'ai *vu* en menus
déroulants...)
Allez dans l'interface, cliquez sur « Afficher les variables du serveur ».
Qu'obtenez-vous (qui concerne les jeux de caractères) ?
Post by D. Eissart
Y a-t-il des réglages "cachés" ?
Oui (d'une certaine manière) : vu que toute la configuration de PHPMyAdmin
ne vous est pas accessible, vous ne pourrez sans doute pas modifier
certains paramètres.
Post by D. Eissart
(Je ne suis pas un spécialiste! Mon site est consacré à de la poésie
antique...)
Je suis pour ma part professeur de lettres classiques ; comme quoi...

Au fait, je viens de faire un tour sur
<http://quintus.horatius.free.fr/v2/affiche_chx.php?demande=1104>.

La page s'affiche très bien chez moi, à l'exception des <œ>, qui sont sans
doute codés à la Windows (capture d'écran :
<Loading Image...>). Tout le reste est correctement codé. Je
ne vois pas trop où est votre problème. Êtes-vous sûr que ce n'est pas le
navigateur que vous utilisez qui n'est pas défaillant/mal configuré ?
D. Eissart
2006-02-01 12:25:25 UTC
Permalink
Allez dans l'interface, cliquez sur « Afficher les variables du serveur ».
Qu'obtenez-vous (qui concerne les jeux de caractères) ?
??? Sur la page "Jeux de caractères et interclassement" ?
Tout un tas de jeux spéciaux (arménien, lituanien,...) et ça se termine
par une série d'utf8 ( c'est utf8_general_ci qui est surligné)
Je suis pour ma part professeur de lettres classiques ; comme quoi...
Comme quoi, effectivement...
La page s'affiche très bien chez moi,
Sur des conseils obtenus par ailleurs j'ai modifié mon code php par
l'utilisation de utf8_encode() appliqué à mes "retours". C'est donc
"mieux" qu'hier sauf....
... à l'exception des <œ>, qui sont sans doute codés à la Windows
Oui, ça reste mon seul problème. Avez-vous une idée du pourquoi ?

Êtes-vous sûr que ce n'est pas le
navigateur que vous utilisez qui n'est pas défaillant/mal configuré ?
Aussi bien IE que Firefox reconnaissent ma page comme étant codée en utf-8.

Merci en tout cas de vous pencher sur mon problème.

D. Eissart
Vincent Ramos
2006-02-01 14:05:10 UTC
Permalink
Post by D. Eissart
Sur des conseils obtenus par ailleurs j'ai modifié mon code php par
l'utilisation de utf8_encode() appliqué à mes "retours". C'est donc
"mieux" qu'hier sauf....
... à l'exception des <œ>, qui sont sans doute codés à la Windows
Oui, ça reste mon seul problème. Avez-vous une idée du pourquoi ?
Vous l'avez codé avec U+009C, qui s'affiche comme un <œ> sous Windows mais
pas ailleurs. En effet, cet <œ>-là est propre à un jeu de caractères de ce
système d'exploitation (CP-1252) mais ne devrait pas être codé ainsi hors
de Windows (il apparaît ailleurs comme un caractère non imprimable). Pour
bien faire, vous devriez le coder par U+0153. Quand vous avez injecté votre
texte dans la bdd, vous avez dû le faire avec un texte mal codé.

Pour corriger cela, extrayez le texte de votre base de données (sous
PHPMyAdmin --> exporter), et remplacez tous vos <œ> par la bonne version
puis réinjectez cela dans la base.
D. Eissart
2006-02-01 14:11:38 UTC
Permalink
Post by Vincent Ramos
Pour corriger cela, extrayez le texte de votre base de données (sous
PHPMyAdmin --> exporter), et remplacez tous vos <œ> par la bonne version
puis réinjectez cela dans la base.
Mais alors, ne serait-ce pas plus simple et rapide d'écrire &oelig; ?
Vincent Ramos
2006-02-01 15:13:57 UTC
Permalink
Post by D. Eissart
Post by Vincent Ramos
Pour corriger cela, extrayez le texte de votre base de données (sous
PHPMyAdmin --> exporter), et remplacez tous vos <œ> par la bonne version
puis réinjectez cela dans la base.
Mais alors, ne serait-ce pas plus simple et rapide d'écrire &oelig; ?
Je proposais cela pour éviter que votre texte ne soit un mélange d'entité
HTML et de caractères codés. Mais, bien sûr, &oelig; fonctionnerait.
Olivier Miakinen
2006-02-01 16:54:32 UTC
Permalink
Post by Vincent Ramos
Vous l'avez codé avec U+009C, qui s'affiche comme un <œ> sous Windows mais
pas ailleurs. En effet, cet <œ>-là est propre à un jeu de caractères de ce
système d'exploitation (CP-1252) mais ne devrait pas être codé ainsi hors
de Windows (il apparaît ailleurs comme un caractère non imprimable).
Oui.
Post by Vincent Ramos
Pour
bien faire, vous devriez le coder par U+0153. Quand vous avez injecté votre
texte dans la bdd, vous avez dû le faire avec un texte mal codé.
Plutôt que « mal codé », je dirais « bien codé, mais dans un jeu
propriétaire ». Ce n'est pas très grave si cela reste un format
interne (il traduit en UTF-8 au moment de l'affichage).
Post by Vincent Ramos
Pour corriger cela, extrayez le texte de votre base de données (sous
PHPMyAdmin --> exporter), et remplacez tous vos <œ> par la bonne version
puis réinjectez cela dans la base.
Sauf que, si j'ai bien compris, c'est impossible du fait que la base
contient du CP1252 (8 bits), et que donc le caractère U+0153 ne peut pas
y être représenté.

Comme j'ai expliqué sur fr.comp.lang.php, soit il passe toute sa base en
UTF-8 (ce qui est la meilleure solution mais qui peut lui prendre un peu
de temps et de sueur), soit il utilise iconv() pour traduire de CP1252
en UTF-8 avant l'affichage, soit encore il utilise utf8_encode() plus
une bidouille pour traiter le cas particulier des caractères qui ne sont
pas dans ISO-8859-1.
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
D. Eissart
2006-02-02 07:42:19 UTC
Permalink
Un grand merci à vous deux pour votre patience...

Finalement je vais faire comme indiqué ("...soit encore il utilise
utf8_encode() plus une bidouille pour traiter le cas particulier des
caractères qui ne sont pas dans ISO-8859-1." La bidouille en question se
limitant à noter par une entité les quelques -rares- caractères qui ne
"passeront" pas comme les "oe")

Mais réellement je ne comprends rien au fonctionnement de cet
encodage... (Et je pense que vu la façon dont ça se passe utf-8 n'est
pas mûr pour devenir "la" référence absolue, ou alors il va falloir
créer des outils "grand-public" qui ne soient pas des "prises de tête"
permanentes...)

Petite question subsidiaire;
Pourquoi ma façon de procéder ne fonctionne pas?

- je copie mes textes (1ère version du site) directement sur l'écran du
navigateur après sélection avec la souris.
- je les colle dans SciTE (éditeur de texte dans lequel j'ai mis en
ligne 1 "coding: utf-8" et dans lequel je vérifie bien que le codage est
bien indiqué utf-8.
- je recopie ces textes dans SciTE et je les colle dans la base de
données où tous les paramètres modifiables ont été mis à la valeur
utf-8. (*)

Enfin, je suis preneur d'adresses de sites où je pourrais essayer de
comprendre cette peu appétissante soupe alchimique ....

Merci encore.

D. Eissart

(*) Je n'avais pas encore de base de données, dans la version 1 du site
à chaque texte correspondait un fichier. Je suis en train de la créer.
Vincent Ramos
2006-02-02 10:01:43 UTC
Permalink
Post by D. Eissart
Mais réellement je ne comprends rien au fonctionnement de cet
encodage... (Et je pense que vu la façon dont ça se passe utf-8 n'est
pas mûr pour devenir "la" référence absolue, ou alors il va falloir
créer des outils "grand-public" qui ne soient pas des "prises de tête"
permanentes...)
Si si, cela fonctionne très bien : la preuve est que vos <œ> non pas mal
codés mais codés selon Windows ont été très correctement transformés par
l'algorithme UTF-8. Le problème, c'est que le résultat n'est pas celui que
vous attendiez. Du reste, tout mon système (GNU/Linux Gentoo) tourne en
UTF-8 et je n'ai aucun souci de ce côté-là.
Post by D. Eissart
Petite question subsidiaire;
Pourquoi ma façon de procéder ne fonctionne pas?
- je copie mes textes (1ère version du site) directement sur l'écran du
navigateur après sélection avec la souris.
- je les colle dans SciTE (éditeur de texte dans lequel j'ai mis en
ligne 1 "coding: utf-8" et dans lequel je vérifie bien que le codage est
bien indiqué utf-8.
- je recopie ces textes dans SciTE et je les colle dans la base de
données où tous les paramètres modifiables ont été mis à la valeur
utf-8. (*)
Si le texte contient des <o> codés à la Windows, votre transformation en
UTF-8 les conserve ainsi, ce qui les rend illisibles. Il vous faut une
étape supplémentaire :

* copiez tous vos textes dans votre éditeur ;
* passez-les d'abord en latin-9 (ISO 8859-15). Cela vous débarrassera des
<œ> Windowsiens tout en les remplaçant par leur contrepartie ISO (norme
internationale) ;
* passez le texte en UTF-8.

De cette manière, tout devrait être bien recodé.
Post by D. Eissart
Enfin, je suis preneur d'adresses de sites où je pourrais essayer de
comprendre cette peu appétissante soupe alchimique ....
<http://www.cl.cam.ac.uk/~mgk25/unicode.html>
Olivier Miakinen
2006-02-02 11:04:09 UTC
Permalink
Post by Vincent Ramos
Si le texte contient des <o> codés à la Windows, votre transformation en
UTF-8 les conserve ainsi, ce qui les rend illisibles.
C'est juste parce que la fonction utf8_encode() qu'il a utilisée
présuppose de l'ISO-8859-1 en entrée et rien d'autre.
Post by Vincent Ramos
* copiez tous vos textes dans votre éditeur ;
* passez-les d'abord en latin-9 (ISO 8859-15). Cela vous débarrassera des
<œ> Windowsiens tout en les remplaçant par leur contrepartie ISO (norme
internationale) ;
* passez le texte en UTF-8.
De cette manière, tout devrait être bien recodé.
Je ne suis pas d'accord. Si l'éditeur connaît aussi bien les trois
encodages (CP1252, ISO-8859-15, UTF-8), il ne sert strictement à rien de
passer par l'étape intermédiaire ISO-8859-15 : autant passer directement
de CP1252 à UTF-8.

Qui plus est, passer par ISO-8859-15 ferait perdre irrémédiablement
d'éventuelles apostrophes (je parle des vraies apostrophes U+2019,
pas des pattes de mouche U+0027). Idem pour les tirets.
Post by Vincent Ramos
Post by D. Eissart
Enfin, je suis preneur d'adresses de sites où je pourrais essayer de
comprendre cette peu appétissante soupe alchimique ....
<http://www.cl.cam.ac.uk/~mgk25/unicode.html>
J'allais le dire. D'ailleurs je l'ai déjà dit. C'est *la* référence sur
le sujet.
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Vincent Ramos
2006-02-02 11:38:52 UTC
Permalink
Post by Olivier Miakinen
Qui plus est, passer par ISO-8859-15 ferait perdre irrémédiablement
d'éventuelles apostrophes (je parle des vraies apostrophes U+2019,
pas des pattes de mouche U+0027). Idem pour les tirets.
Vous avez entièrement raison : j'avais oublié ce point.
D. Eissart
2006-02-02 12:19:18 UTC
Permalink
Merci encore une fois à tous les deux je vais lire la doc. indiquée et
essayer de "digérer" tout ça....

Bonne journée.

D.E.
Olivier Miakinen
2006-02-02 10:55:07 UTC
Permalink
Post by D. Eissart
Finalement je vais faire comme indiqué ("...soit encore il utilise
utf8_encode() plus une bidouille pour traiter le cas particulier des
caractères qui ne sont pas dans ISO-8859-1." La bidouille en question se
limitant à noter par une entité les quelques -rares- caractères qui ne
"passeront" pas comme les "oe")
Le bidouille proposée était plus automatique (en quelque sorte une
fonction utf8_encode prenant en entrée CP1252 et pas ISO-8859-1).
Si tu dois toi-même faire des cas particuliers pour transformer
certains caractères en entités nommées, à mon humble avis tu t'embêtes
pour rien.
Post by D. Eissart
Mais réellement je ne comprends rien au fonctionnement de cet
encodage...
Lequel ? ISO-8859-1, CP1252, ou UTF-8 ?

Pour les deux premiers, je te rappelle la page suivante :
<http://www.miakinen.net/vrac/charsets/>.

Pour le dernier, tu peux lire ceci si tu connais un peu l'anglais :
<http://www.cl.cam.ac.uk/~mgk25/unicode.html>. Ne pas s'inquiéter du
fait qu'il y ait « Unix/Linux » dans le titre, en réalité les infos
sur UTF-8 sont parfaitement indépendantes du type de plateforme.
Post by D. Eissart
(Et je pense que vu la façon dont ça se passe utf-8 n'est
pas mûr pour devenir "la" référence absolue, ou alors il va falloir
créer des outils "grand-public" qui ne soient pas des "prises de tête"
permanentes...)
Si je puis me permettre, ton problème n'est pas dû à UTF-8 en lui-même,
mais justement au fait que ce n'est pas encore « la » référence absolue,
et que donc on se traîne comme des boulets des jeux de caractères divers
et variés : c'est du CP1252 pour toi, mais CP850 pour les utilisateurs
d'OS/2 par exemple.

Note que si tu utilises au moins PHP 4.2.1, tu devrais d'ailleurs
pouvoir éviter toute bidouille en utilisant simplement la fonction iconv().
Post by D. Eissart
Petite question subsidiaire;
Pourquoi ma façon de procéder ne fonctionne pas?
Je passe.
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Iulius
2006-02-03 23:14:33 UTC
Permalink
Post by .
http://quintus.horatius.free.fr/v2/affiche_chx.php?demande=1104
(les "?" sont des é à â etc.. dans la table de mySql)
Il demeure encore un petit problème à :
« conduit ses ch[œ]urs ».

Le reste passe sinon désormais très bien (à part qu'il vaudrait
mieux ne pas utiliser les entités &oelig; [employé une fois]
&nbsp; &#8212; etc.).
--
Iulius

« Vinum bonum laetificat cor hominis. »
D. Eissart
2006-02-04 06:52:55 UTC
Permalink
Post by Iulius
Le reste passe sinon désormais très bien (à part qu'il vaudrait
mieux ne pas utiliser les entités &oelig; [employé une fois]
&nbsp; &#8212; etc.).
Les é è à etc... passent bien grâce apparemment à utf8_encode()
Pour le reste je patauge encore...

&oelig; &nbsp; &#8212; >>> A remplacer par ... ?

D.E.
Iulius
2006-02-04 08:57:26 UTC
Permalink
La veille des Nones de février
Post by D. Eissart
Post by Iulius
Le reste passe sinon désormais très bien (à part qu'il vaudrait
mieux ne pas utiliser les entités &oelig; [employé une fois]
&nbsp; &#8212; etc.).
Les é è à etc... passent bien grâce apparemment à utf8_encode()
Il faudrait uniformiser toute la page car vous mettez encore des
entités dans vos meta-tags par exemple...
Regardez partout et remplacez toutes les entités.
Post by D. Eissart
&oelig; &nbsp; &#8212; >>> A remplacer par ... ?
Par leur équivalent en utf-8 :

&oelig; : œ
&nbsp; : ' '
&#8212; : —

J'envoie ce message encodé en utf-8 pour vous montrer ces caractères ;
il suffit de faire de même en XHTML !
--
Iulius

« En voyant le lit vide, il le devint. » (Ponson du Terrail)
D. Eissart
2006-02-04 10:03:53 UTC
Permalink
Post by Iulius
&oelig; : œ
&nbsp; : ' '
&#8212; : —
J'envoie ce message encodé en utf-8 pour vous montrer ces caractères ;
il suffit de faire de même en XHTML !
Tant pis si je passe pour un parfait abruti mais il est clair que j'ai
raté un chapitre....

Mon problème est justement que je ne sais pas *quoi* taper sur mon
clavier pour obtenir ça !

Quand par exemple je tape alt+0156 j'obtiens bien o+e liés mais ce n'est
pas du utf-8. (comme expliqué par d'autres intervenants auparavant).
Donc je comprends bien qu'il faut que je tape autre chose mais je ne
sais pas quoi... Pareil pour les autres signes.

Aïe ! Aïe ! Aïe ! C'est dur d'avouer son incompétence...

(Heureusement qu'il ya des âmes charitables sur Usenet!)

D. Eissart
Iulius
2006-02-04 13:01:34 UTC
Permalink
Post by D. Eissart
Mon problème est justement que je ne sais pas *quoi* taper sur mon
clavier pour obtenir ça !
Je ne connais pas les deux octets qui permettent de coder de tels
caractères ! En fait, utilisez un éditeur de textes qui vous permette
d'écrire les « œ » et autres joyeusetés avec l'encodage que vous souhaitez
puis qui vous permette d'enregistrer votre page encodée en utf-8.

Même le Bloc-Notes de Windows sait faire ! Lorsque vous demandez
pour la première fois l'enregistrement d'un fichier, sélectionnez
l'encodage dans la liste déroulante en dessous du nom de fichier.

Pour ma part, j'utilise SciTE comme éditeur de code (html ou autre) :
http://www.scintilla.org/SciTE.html

Il gère parfaitement l'utf-8.
Post by D. Eissart
Quand par exemple je tape alt+0156 j'obtiens bien o+e liés mais ce n'est
pas du utf-8.
Il est vain d'apprendre ces combinaisons de touches. Utilisez le pilote
de clavier enrichi de M. Denis Liégeois :

http://home.tiscali-business.be/~fbou2235/kbdfrac.htm
Post by D. Eissart
Donc je comprends bien qu'il faut que je tape autre chose mais je ne
sais pas quoi... Pareil pour les autres signes.
Il y a le dernier signe en question sur la touche « ! » dudit clavier.

Sinon, vous pouvez très bien écrire en grec ou des caractères spéciaux
dans Unicode -> l'éditeur de textes se chargera de les encoder en utf-8.
Post by D. Eissart
Aïe ! Aïe ! Aïe ! C'est dur d'avouer son incompétence...
Il ne faut jamais avoir peur de dire que l'on ne sait pas. Et puis,
on est incompétent jusqu'à ce que quelqu'un l'explique.
--
Iulius inculte sur de nombreux domaines !

« Vinum spumosum nisi defluat est uitiosum. »
D. Eissart
2006-02-04 14:04:01 UTC
Permalink
Iulius a écrit :
Utilisez le pilote
On a dû me lancer un sort! (ou: dies nefastus...)

J'ai installé le pilote.
J'ai tapé une ligne dans SciTE (encodage utf-8 cookie). J'ai enregistré.
J'ai copié cette ligne.
Je l'ai collée dans la base de données.C'est la dernière ligne de:
http://quintus.horatius.free.fr/v2/affiche_chx.php?demande=1103

Juste après le c cédille majuscule il y avait une apostrophe, un o+e
minuscule, un O+E majuscule.

????

(Et le validateur du W3C me dit "You have used an illegal character in
your text." - 4 fois!)

D.E. (Help!)
Iulius
2006-02-04 22:26:51 UTC
Permalink
Post by D. Eissart
J'ai installé le pilote.
J'ai tapé une ligne dans SciTE (encodage utf-8 cookie). J'ai enregistré.
J'ai copié cette ligne.
http://quintus.horatius.free.fr/v2/affiche_chx.php?demande=1103
Avez-vous copié les caractères en utf-8 (en lisant le fichier SciTE
en mode 8bits lorsqu'il est encodé en utf-8) ?

Il ne faut pas non plus sur-encoder les caractères lors de l'utilisation
de la base de données et des commandes d'encodage/décodage en php.
--
Iulius

« Argumentum baculinum. » (Sganarelle)
D. Eissart
2006-02-05 09:44:57 UTC
Permalink
Post by Iulius
Avez-vous copié les caractères en utf-8 (en lisant le fichier SciTE
en mode 8bits lorsqu'il est encodé en utf-8) ?
J'ai placé en première ligne <!-- coding: utf-8 --> qui force SciTE à
rester en utf-8. J'ai à peu près tout essayé...
Post by Iulius
Il ne faut pas non plus sur-encoder les caractères lors de l'utilisation
de la base de données et des commandes d'encodage/décodage en php.
Je ne comprends pas "sur-encoder".

Je crois que je vais abandonner là mon projet de créer une version 2 en
utf-8, c'est décidément (pour moi) un casse-tête tel que j'ai
franchement l'impression de perdre mon temps... Tant pis! On verra ça
dans quelques années s'il y a des outils adaptés au grand-public.

Merci en tout cas d'avoir essayé de m'aider.

D.E.
Olivier Miakinen
2006-02-05 16:49:59 UTC
Permalink
Post by D. Eissart
J'ai placé en première ligne <!-- coding: utf-8 --> qui force SciTE à
rester en utf-8. J'ai à peu près tout essayé...
Ça me semble bizarre que ce soit le *contenu* d'un fichier qui indique à
l'éditeur avec quel encodage il doit l'enregistrer. Je ne connais pas
SciTE mais je trouve qu'un éditeur de texte bien fichu devrait avoir une
option pour dire « sauvegarder en UTF-8 » ou « sauvegarder en UTF-16BE »
sans parler de Shift-JIS, CP850 ou EBCDIC.
Post by D. Eissart
Je crois que je vais abandonner là mon projet de créer une version 2 en
utf-8, c'est décidément (pour moi) un casse-tête tel que j'ai
franchement l'impression de perdre mon temps... Tant pis!
C'est dommage, mais bon on ne peut pas te forcer.
Post by D. Eissart
On verra ça
dans quelques années s'il y a des outils adaptés au grand-public.
Notepad (bloc-notes) ?
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
D. Eissart
2006-02-05 17:10:01 UTC
Permalink
Post by Olivier Miakinen
Notepad (bloc-notes) ?
Pas mieux !
Fnalement, je me demande si ce ne sont pas les paramétrages de la base
de données par FREE qui posent problèmes.
Si j'étais sûr, je changerais bien de crèmerie...

D.E.
Olivier Miakinen
2006-02-06 20:19:04 UTC
Permalink
Post by D. Eissart
Post by Olivier Miakinen
Notepad (bloc-notes) ?
Pas mieux !
Pourtant, je viens de faire l'essai et cela a l'air de fonctionner.

J'ai saisi un simple œ dans notepad, puis je l'ai sauvé sous chacun des
quatre formats proposés :
- ANSI (c'est-à-dire CP1252)
- Unicode (c'est-à-dire UTF-16 Little Endian)
- Unicode big endian (c'est-à-dire UTF-16 Big Endian)
- UTF-8 (c'est-à-dire UTF-8) ;-)

J'ai respectivement des fichiers de 1, 4, 4 et 5 octets, avec les
contenus suivants :
- 9C
- FF FE 53 01
- FE FF 01 53
- EF BB BF C5 93

Bon, dans le dernier cas il encode un BOM qui n'est peut-être pas utile,
mais en tout cas cela donne le résultat escompté. Tu as bien choisi
UTF-8 et pas Unicode ?
Post by D. Eissart
Fnalement, je me demande si ce ne sont pas les paramétrages de la base
de données par FREE qui posent problèmes.
Si j'étais sûr, je changerais bien de crèmerie...
La base de données, je n'en sais rien. Mais j'ai transféré les quatre
fichiers sur un compte free, et quand je les visualise avec Mozilla
j'obtiens bien un œ dans chaque cas, en choisissant correctement
l'encodage pour les visualiser.
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
D. Eissart
2006-02-07 07:28:12 UTC
Permalink
Post by Olivier Miakinen
Pourtant, je viens de faire l'essai et cela a l'air de fonctionner.
Oui, chez moi aussi, si je saisis directement un œ dans le fichier. Là
n'est pas le problème...
Post by Olivier Miakinen
La base de données, je n'en sais rien. Mais j'ai transféré les quatre
fichiers sur un compte free, et quand je les visualise avec Mozilla
j'obtiens bien un œ dans chaque cas, en choisissant correctement
l'encodage pour les visualiser.
Oui, le problème est finalement cerné mais pas résolu.

C'est bien la base de données qui pose le problème. Que je saisisse un œ
ou que je le colle (copié dans SciTE forcé en utf-8) dans la bdd il va
bien apparaître à l'écran dans MySQL. Mais après lorsque je le récupère
dans mon fichier php il n'apparaît plus. Pourtant la base de données est
censée être en utf-8 (j'ai mis tous les paramétrages disponibles à cette
valeur du moins me semble-t-il...) et dans la récupération de mes
données j'ai utilisé utf8_encode(). (fonction dont, au passage, j'ai du
mal à voir la nécessité puisque j'ai un meta qui déclare le charset
utf-8, ... quoique ça a au moins permis d'afficher les é è et autres à...)

A mon avis (très, très humble...) je comprends que la base de données de
Free ne me renvoie pas de l'utf-8.

Est-ce connu ? Est-ce normal ? Qu'ai-je oublié ? Que faire de plus ????
(Au secours...)

D.E.
Olivier Miakinen
2006-02-07 08:24:07 UTC
Permalink
Ça y est, j'ai compris !
[...] œ [...] copié dans SciTE forcé en utf-8 [...] dans la bdd [...]
Pourtant la base de données est censée être en utf-8 [...] et dans
la récupération de mes données j'ai utilisé utf8_encode().
Il faut choisir ! Soit tes caractères sont en utf-8 dans la base de
données, soit ils sont en ISO-8859-1 et tu utilises utf8_encode pour les
transformer en utf-8 au moment de l'affichage.

Puisque tu utilises toujours utf8_encode(), et que cela fonctionne
pour les caractères é è à ç (etc.), c'est que ces caractères sont en
ISO-8859-1 dans ta base. Alors bien sûr, quand tu les transformes
de ISO-8859-1 en UTF-8 par utf8_encode(), ça marche pour eux, mais le
pauvre caractère œ qui était *déjà* en UTF-8, tu le sur-encodes par
l'appel à utf8_encode(), et il se transforme donc en n'importe quoi.

Si tu veux stocker dans ta base un œ en UTF-8, il faut donc que *tous*
les caractères soient stockés en UTF-8. Cela ne changera rien pour les
lettres non accentuées (leur encodage ISO-8859-1 est identique¹ à leur
encodage UTF-8), mais cela change tout pour les lettres accentuées.
(fonction dont, au passage, j'ai du mal à voir la nécessité puisque
j'ai un meta qui déclare le charset utf-8, ... quoique ça a au moins
permis d'afficher les é è et autres à...)
C'est bien ce que je disais. Si tu as besoin de la fonction
utf8_encode() pour faire afficher les é, è et à en UTF-8, c'est
qu'ils ne sont pas en UTF-8 dans la base. Mets tout en UTF-8, et
supprime l'appel à la fonction ; ça devrait marcher beaucoup mieux.

Tu peux d'ailleurs faire un essai en te contentant de supprimer l'appel
à la fonction : si tu as bien stocké tes œ en UTF-8, eux seuls devraient
maintenant s'afficher comme il faut, les autres étant probablement
remplacés par des points d'interrogation ou des petits carrés.
A mon avis (très, très humble...) je comprends que la base de données de
Free ne me renvoie pas de l'utf-8.
À mon avis (encore plus humble), la base de données ne renvoie que ce
que tu lui as donné... « Garbage In, Garbage Out »


¹ Va voir sur <http://www.miakinen.net/vrac/charsets/>. Tous les
caractères de ces tableaux qui sont sur fond gris (moitié supérieure
du tableau) font partie de ASCII, de ISO-8859-1 et de Unicode aux
positions 32 à 126 (20 à 7E hexa) : ils sont encodés de la même
manière en us-ascii, iso-8859-1 et utf-8. Tous les autres ont un
encodage sur plusieurs octets en utf-8.

Espérant avoir aidé,
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
D. Eissart
2006-02-07 10:09:42 UTC
Permalink
Olivier Miakinen a écrit :

Mets tout en UTF-8, et
Post by Olivier Miakinen
supprime l'appel à la fonction ; ça devrait marcher beaucoup mieux.
Ça ne marche toujours pas !
Tout mettre en utf8 je ne demande que ça... Mais que je tape directement
au clavier (dans une base qui est censée être en utf8) ou que je colle à
partir d'un fichier encodé en utf8 le résultat est le même.

Si j'enlève utf8__encode() plus rien (hors caract. ASCII) n'est reconnu
(é è comme œ).

la base de données ne renvoie que ce
Post by Olivier Miakinen
que tu lui as donné... « Garbage In, Garbage Out »
Donc c'est qu'elle n'est pas paramétrée en utf8. C'est la seule raison
possible. Et je ne vois pas comment la forcer à y passer.

Quand je demande la validation du W3C j'obtiens:
"Sorry, I am unable to validate this document because on line 112-113,
115, 117-118, 120, 122, 124-125, 127, 131, 134-135 it contained one or
more bytes that I cannot interpret as utf-8 (in other words, the bytes
found are not valid values in the specified Character Encoding). Please
check both the content of the file and the character encoding indication."
(toutes les lignes contenant autre chose que de l'ASCII)
Post by Olivier Miakinen
Espérant avoir aidé,
A force de cerner le problème...

D.E.

Iulius
2006-02-05 21:00:38 UTC
Permalink
Le jour des Nones de février
Post by Olivier Miakinen
Post by D. Eissart
J'ai placé en première ligne <!-- coding: utf-8 --> qui force SciTE à
rester en utf-8. J'ai à peu près tout essayé...
Ça me semble bizarre que ce soit le *contenu* d'un fichier qui indique à
l'éditeur avec quel encodage il doit l'enregistrer.
Non ; cette ligne lui indique avec quel décodage il doit lire le fichier.
Car, a priori, il ne sait pas lequel utiliser.

Il est possible d'indiquer dans son fichier de configuration le décodage
par défaut et faire en sorte que *.html soit ouvert en utf-8 par exemple.
SciTE peut aussi mettre un cookie dans le fichier indiquant qu'il doit
être lu en utf-8 (sans avoir besoin de la première ligne) ; mais cela
pose des problèmes, je crois, avec des scripts en php qui sont ensuite
mal parsés.
--
Iulius

« Video meliora proboque deteriora sequor. » (Ovide)
Olivier Miakinen
2006-02-04 14:04:11 UTC
Permalink
Post by Iulius
Post by D. Eissart
Quand par exemple je tape alt+0156 j'obtiens bien o+e liés
Oui.
Post by Iulius
Post by D. Eissart
mais ce n'est pas du utf-8.
Une chose importante à savoir, c'est que la façon d'obtenir un caractère
est indépendante de la façon dont on le sauve. Je veux dire qu'un « œ »
CP1252 affiché sur l'écran ou dans un éditeur de texte, c'est la même
chose qu'un « œ » ISO-8859-15 et aussi la même chose qu'un « œ » UTF-8.
C'est simplement au moment de le sauver dans un fichier que l'éditeur de
texte choisira de l'encoder par un octet valant 156 (CP1252) ou un octet
valant 189 (ISO-8859-15) ou encore deux octets valant respectivement 197
et 147 (UTF-8). Donc si tu vois un « œ » dans ton éditeur de texte, même
si tu l'as obtenu par alt+0156, ce sera de l'UTF-8 si ton éditeur sauve
le fichier en UTF-8.
Post by Iulius
Il est vain d'apprendre ces combinaisons de touches. Utilisez le pilote
http://home.tiscali-business.be/~fbou2235/kbdfrac.htm
Oui. Attention de ne pas changer trop vite de version de Thunderbird car
il y a un bug qui change les É en é, les Ç en ç et les Œ en œ...
Post by Iulius
Post by D. Eissart
Donc je comprends bien qu'il faut que je tape autre chose mais je ne
sais pas quoi... Pareil pour les autres signes.
Justement non, tu ne dois pas taper autre chose. Obtiens les caractères
de la façon que tu préfères, puis demande à sauver en UTF-8. Il n'y a
rien de plus compliqué.
Post by Iulius
Post by D. Eissart
Aïe ! Aïe ! Aïe ! C'est dur d'avouer son incompétence...
Il ne faut jamais avoir peur de dire que l'on ne sait pas. Et puis,
on est incompétent jusqu'à ce que quelqu'un l'explique.
Voilà. Tout pareil.
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
D. Eissart
2006-02-04 15:20:50 UTC
Permalink
Post by Olivier Miakinen
Justement non, tu ne dois pas taper autre chose. Obtiens les caractères
de la façon que tu préfères, puis demande à sauver en UTF-8. Il n'y a
rien de plus compliqué.
voir ma réponse à Iulius (même heure que ton message).
Je n'arrive pas à comprendre où est le hic !... (d'autant plus que je
suis très sobre...)

D.E.
Iulius
2006-02-04 22:22:54 UTC
Permalink
Post by Olivier Miakinen
Oui. Attention de ne pas changer trop vite de version de Thunderbird car
il y a un bug qui change les É en é, les Ç en ç et les Œ en œ...
Oui, j'ai d'ailleurs mis un lien vers le bug en question sur Bugzilla
dans « fr.usenet.8bits ». Il semble être en voie de résolution.

Du reste, pour ceux qui n'utilisaient pas ce pilote auparavant, cela
passe quasiment inaperçu (vu qu'ils ne se servaient pas de ces majuscules).
Post by Olivier Miakinen
Justement non, tu ne dois pas taper autre chose. Obtiens les caractères
de la façon que tu préfères, puis demande à sauver en UTF-8. Il n'y a
rien de plus compliqué.
Un conseil : faire un petit fichier texte avec les caractères que vous
utilisez le plus fréquemment. Ainsi, il est rapide de les retrouver et
de faire des copier-coller.
Pour avoir la première fois les caractères, voyez dans la table de
caractères (accessoires Windows) ou dans l'insertion de caractères
spéciaux dans Word par exemple.
--
Iulius

« -- Je vous ai à l'œil, Gaulois !
-- Briseradius est furieux, je ne donne pas cher de votre peau !
-- Bien sûr, puisqu'il nous a à l'œil. » (Astérix)
Loading...