ISO 8859-1 et le caractère €

a marqué ce sujet comme résolu.

Bonjour à tous,

Je suis tombé sur un truc que je n’arrive pas totalement à comprendre.

Je travail sur une application en ISO-8859-1 (le passage en UTF-8 est exclu…) Normalement dans ce jeu de caractère le € n’est pas supporté. Pourtant lorsqu’un utilisateur rentre le € il est bien restitué plus tard à l’affichage.

Ma première hypothèse a était que le navigateur s’il ne sait pas afficher un caractère en dehors du charset utilisé utilise de cp1252 de windows. Hors en essayant sur une distribution linux le caractère est toujours bien affiché :o

Quelqu’un aurait une idée de ce qui ce passe exactement ? :'(

Je vois deux possibilités :

  1. Soit une lib quelque part utilise ISO-8859-15 sans prévenir. Ça se teste en utilisant les caractères du lien ; crée une entrée avec les 16 caractères, et regarde ce qui sort. Si certains ont été modifiés, ça te donnera le jeu ISO utilisé.
  2. Soit, et maintenant que j’y pense c’est sans doute le plus probable, tu as un double encodage : des octets Unicode enregistrés comme du ISO. Ça se vérifie en forçant l’affichage en ISO et/ou en regardant les données au niveau binaire. Cf https://www.fileformat.info/info/unicode/char/20ac/index.htm pour savoir quoi chercher.

Le point 2 était très courant à une époque : tu avais l’impression que tu manipulais de l’ISO, mais en fait c’était de l’Unicode (parce qu’une entrée te file des octets Unicode que tu traites sans conversion explicite). Ça se voit en BDD, les octets sont bien ceux d’unicode.

Le piège c’est que si ça donne l’impression que ça marche, en vrai ça casse plein de trucs (recherche, tailles des chaines de caractères, certains traitements plantent carrément…)

Salut,

Si la question se pose toujours après les réponses de SpaceFox, peux-tu nous donner un peu plus de détails ? Notamment :

  • Dans quel langage est conçu ton application ?
  • Fais-tu appel à des fonctions de localisation (setlocale() en C par exemple) ?
  • Par quel moyen l’utilisateur interagit-il avec ton application (terminal ou graphique, notamment) ?
+0 -0

Merci pour vos réponses.

L’hexadécimal du code stocké en base est : 0x80 (c’est du CP1252).

Je développe en Java. Java pour ses chaînes de caractère utilise uniquement de l’Unicode si j’ai bien compris. Les locales sont défini par un serveur d’application.

C’est une interface web.

L’hexadécimal du code stocké en base est : 0x80 (c’est du CP1252).

spiritwhite

Tu as donc ta réponse : vous utilisez le jeu de caractères Windows-1252 et pas ISO-8859-1. Le caractère 0x80 fait justement partie de ceux qui sont différents entre ces deux normes.

PS : ton premier message, et le titre du topic n’étaient pas clairs. Les jeux de caractères Windows-1525 et ISO-8858-1[5] ne sont pas interchangeables. De plus (dans ton premier message) :

Hors en essayant sur une distribution linux le caractère est toujours bien affiché :o

Pourquoi ne le serait-il pas si c’est une page web ? Les navigateurs sont tout à fait capables de gérer des tas d’encodages différents, et heureusement.

On vient de trouver le problème. Les utilisateurs s’amusent à faire des copier-coller depuis des documents word ayant des caractères windows 1525… L’application est bien en ISO-8859–1 d’après l’encodage renseigné dans l’entête de requête HTML.

En tout cas merci :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte