Bonjour,
Post by Denis BeauregardJ'ai eu un problème de ce genre récemment.
Le client me fournissait les données dans un fichier Excel de
plusieurs Mo. Je l'enregistrais en texte tabulé et je le lisais
avec Easy PHP et PHPmyadmin.
« Texte tabulé », je suppose que cela veut dire du texte simple, avec un
caractère TAB (08) entre chaque champ ? Est-ce que tu avais le choix du
jeu de caractères, par exemple CP1252, CP850, UTF-8, ISO-8859-1 ou
ISO-8859-15 ?
Post by Denis BeauregardLes caractères posant problème étaient lus correctement et bien
affichés chez moi (j'ai Seamonkey 1.1.7).
Avec quel jeu de caractère déclaré (ou quel jeu reconnu) ? Pour le
savoir, et éventuellement le changer, dans SeaMonkey en français sur
Windows, c'est : Affichage > Encodage des caractères.
Post by Denis BeauregardIl s'agit de : l'apostrophe de Word ’/', le …/..., le �"/oe et
l'apostrophe inverse ‘/'. Tous les autres caractères passaient
bien (mais mon client pourrait éventuellement utiliser d'autres
caractères).
Ah, voilà du concret ! Un grand merci pour cela, on va avancer.
’ = U+2019
Ce caractère existe à la position 0x92 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.
… = U+2026
Ce caractère existe à la position 0x85 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.
�" = U+FFFD U+0022
Tu as eu un problème à l'encodage car U+FFFD est le caractère de
remplacement. Je suppose avec ta translittération en « oe » que tu
voulais parler de « �" » : ce caractère existe à la position 0x9C dans
CP1252, à la position 0xBD dans ISO-8859-15, et nulle part dans ISO-8859-1.
‘ = U+2018
Ce caractère existe à la position 0x91 dans CP1252, mais pas dans
ISO-8859-1 ni ISO-8859-15.
Cf. <http://people.w3.org/rishida/scripts/uniview.fr/conversion.html> et
<http://www.miakinen.net/vrac/charsets/?or=4>.
Post by Denis Beauregard[...]
Ma solution : demander au client de remplacer ces caractères dans
sa base de données. Il y en avait des milliers...
D'autres solutions devaient être possibles, à commencer par changer le
charset de lecture lors de l'accès à la base de données.
Autre possibilité :
$latin1 = iconv('Windows-1252', 'ISO-8859-1//TRANSLIT', $cp1252);
Post by Denis BeauregardCela dit, je suppose que la BDD a le jeu Windows 1252
Certainement, d'après les caractères que tu cites comme ayant posé des
problèmes.
Post by Denis Beauregardet que UTF8 ne connaît pas les caractères problématiques
Non, ça c'est impossible. UTF-8 connaît *tous* les caractères de *tous*
les jeux de caractères utilisables couramment. C'est ISO-8859-1 qui ne
connaît pas les caractères en question.
Post by Denis Beauregard[...]
En ce qui concerne le problème soulevé, il n'y aurait qu'un petit
nombre de caractères à remplacer (4 peut-être).
Il y en a 27 actuellement, et il pourrait y en avoir jusqu'à 32 si
Microsoft décide d'en rajouter :
<http://www.miakinen.net/vrac/charsets/?or=4>.
Cela dit, autant laisser faire la fonction iconv(), surtout si tu veux
les translittérer (remplacer « ’ » par « ' », « … » par « ... », « �" »
par « oe », « ‘ » par « ` », mais aussi « �' » par « OE », etc.).
Cordialement,
--
Olivier Miakinen