Problème de conversion UTF-8 vers ISO 8859-15
Mogz
-
fx -
fx -
Bonjour à tous,
Travaillant sur un gros projet d'entreprise, je rencontre un problème lors d'une étape de conversion de fichier depuis le format UTF-8 vers le format SO 8859-15. Nous utilisons un EAI pour l’ensemble de nos processus, mais c'est sur le mécanisme de conversion même que j'en viens à me poser des questions, c'est pourquoi je suis ici.
Test de conversion
Tout d’abord, pour tester la conversion, j’ai utilisé un caractère ‘simple’ : le sigle €.
J’ai donc créé un fichier au format UTF-8 avec quelques caractères de bases et un caractère €. Avec un éditeur hexa-décimal, le code de l’€ devient visible : E2 82 AC
Une fois converti en binaire, cela donne : 11100010-10000010-10101100
D'après le fonctionnement de l'UTF-8 ( https://fr.wikipedia.org/wiki/Utf8 ), les caractères en gras indiquent un encodage sur 3 octets, les autres codent le caractère. Nous obtenons donc le nombre binaire suivant : 0010000010101100
Ce qui, en hexa décimal, donne : 20AC
Jusque là, pas d'erreur : l'encodage est correct, nous retrouvons bien le caractère € à l'emplacement 20AC sur la liste des caractère à la plage UTF adaptée : http://fr.wikipedia.org/wiki/Table_des_caractères_Unicode_(2000-2FFF), la partie Symboles monétaires (copiez collez le lien pour accéder à la page).
Une fois le fichier converti en ISO 8859-15, le symbole € n'est pas visible sous Notepad++. Mais ce n'est pas un problème, car via l'éditeur hexa décimal, il est possible de constater que le code 9A est présent. Ce qui, dans la table ISO 8859-15 ( https://fr.wikipedia.org/wiki/ISO_8859-15 ), correspond bien au symbole €.
Conversion réussie.
Problème de conversion
J'en viens maintenant à mon problème. Ce mécanisme, qui fonctionne correctement avec le symbole €, ne fonctionne pas avec le symbole • . Pourquoi ce caractère ? Allez savoir, le client est roi... mais nous devons le convertir.
Avec la même démarche qu'au dessus, j'obtiens en UTF-8 :
En hexa décimal : E2 80 A2
En binaire : 11100010-10000000-10100010
Code caractère binaire : 0010000000100010
Code caractère hexa décimal : 2022
Comme pour le signe €, il existe bien dans la table des caractères, section Ponctuation générale
C'est lorsque nous passons en ISO 8859-15 que le problème qui survient : nous avons un joli message d'erreur de type 'out of range' : le code du caractère serait trop grand pour rentrer dans la plage de l'ISO 8859-15.
Pour retrouver ce code, j'ai donc pensé à faire la démarche en sens inverse. J'ai crée un fichier contenant uniquement ce caractère et regardé son code hexa décimal : 95. Je l'ai aussi trouvé dans la liste de quelques caractère spéciaux ( https://www.commentcamarche.net/contents/489-caracteres-speciaux-html ) avec le code décimal 149 ... qui, en hexa décimal, donne aussi 95.
Problème : le caractère 0x95 n'en est pas un. Sur la page de l'ISO 8859-1 (identique à l'ISO 8859-15 pour ce caractère), cela correspond à .. 'Message Waiting' ( https://en.wikipedia.org/wiki/ISO/IEC_8859-1 ).
Questions (enfin !)
J'en viens donc à me poser la question suivante : comment les éditeurs arrivent-ils à afficher le caractère 0x95 alors qu'il n'existe pas ? Comprennent-ils qu'il s'agit d'un caractère système, non affichable, et font-ils une conversion automatique pour aller chercher un autre caractère dans une ... table de backup ? Est-ce même système qui est utilisé lors des conversions depuis l'UTF-8 vers l'ISO 8859-15 ?
Au passage, après avoir copié collé ce fameux caractère dans l'éditeur du forum, après une prévisualisation, il avait été interprété par suivit de 8226... l'équivalent décimal de l'hexa décimal 2022, le code de caractère •.
Cette théorie de la 'table de backup' me semble tirée par les cheveux, mais cela expliquerait tout :
1 - lancement de la conversion
2 - obtention du code hexa 95
3 - transcodification pour obtenir le code hexa 'affichable' 2022
4 - échec de la conversion car 2022 est bien trop élevé pour l'ISO 8859-15
Qu'en pensez vous ? J'ai peut-être commis un erreur énorme quelque part, la réponse est peut-être grosse comme le nez au milieu du visage (c'est même probable), mais je ne vois pas.
Je suis à la recherche de toute aide possible. Merci beaucoup de m'avoir lu ! ;)
Mogz
Travaillant sur un gros projet d'entreprise, je rencontre un problème lors d'une étape de conversion de fichier depuis le format UTF-8 vers le format SO 8859-15. Nous utilisons un EAI pour l’ensemble de nos processus, mais c'est sur le mécanisme de conversion même que j'en viens à me poser des questions, c'est pourquoi je suis ici.
Test de conversion
Tout d’abord, pour tester la conversion, j’ai utilisé un caractère ‘simple’ : le sigle €.
J’ai donc créé un fichier au format UTF-8 avec quelques caractères de bases et un caractère €. Avec un éditeur hexa-décimal, le code de l’€ devient visible : E2 82 AC
Une fois converti en binaire, cela donne : 11100010-10000010-10101100
D'après le fonctionnement de l'UTF-8 ( https://fr.wikipedia.org/wiki/Utf8 ), les caractères en gras indiquent un encodage sur 3 octets, les autres codent le caractère. Nous obtenons donc le nombre binaire suivant : 0010000010101100
Ce qui, en hexa décimal, donne : 20AC
Jusque là, pas d'erreur : l'encodage est correct, nous retrouvons bien le caractère € à l'emplacement 20AC sur la liste des caractère à la plage UTF adaptée : http://fr.wikipedia.org/wiki/Table_des_caractères_Unicode_(2000-2FFF), la partie Symboles monétaires (copiez collez le lien pour accéder à la page).
Une fois le fichier converti en ISO 8859-15, le symbole € n'est pas visible sous Notepad++. Mais ce n'est pas un problème, car via l'éditeur hexa décimal, il est possible de constater que le code 9A est présent. Ce qui, dans la table ISO 8859-15 ( https://fr.wikipedia.org/wiki/ISO_8859-15 ), correspond bien au symbole €.
Conversion réussie.
Problème de conversion
J'en viens maintenant à mon problème. Ce mécanisme, qui fonctionne correctement avec le symbole €, ne fonctionne pas avec le symbole • . Pourquoi ce caractère ? Allez savoir, le client est roi... mais nous devons le convertir.
Avec la même démarche qu'au dessus, j'obtiens en UTF-8 :
En hexa décimal : E2 80 A2
En binaire : 11100010-10000000-10100010
Code caractère binaire : 0010000000100010
Code caractère hexa décimal : 2022
Comme pour le signe €, il existe bien dans la table des caractères, section Ponctuation générale
C'est lorsque nous passons en ISO 8859-15 que le problème qui survient : nous avons un joli message d'erreur de type 'out of range' : le code du caractère serait trop grand pour rentrer dans la plage de l'ISO 8859-15.
Pour retrouver ce code, j'ai donc pensé à faire la démarche en sens inverse. J'ai crée un fichier contenant uniquement ce caractère et regardé son code hexa décimal : 95. Je l'ai aussi trouvé dans la liste de quelques caractère spéciaux ( https://www.commentcamarche.net/contents/489-caracteres-speciaux-html ) avec le code décimal 149 ... qui, en hexa décimal, donne aussi 95.
Problème : le caractère 0x95 n'en est pas un. Sur la page de l'ISO 8859-1 (identique à l'ISO 8859-15 pour ce caractère), cela correspond à .. 'Message Waiting' ( https://en.wikipedia.org/wiki/ISO/IEC_8859-1 ).
Questions (enfin !)
J'en viens donc à me poser la question suivante : comment les éditeurs arrivent-ils à afficher le caractère 0x95 alors qu'il n'existe pas ? Comprennent-ils qu'il s'agit d'un caractère système, non affichable, et font-ils une conversion automatique pour aller chercher un autre caractère dans une ... table de backup ? Est-ce même système qui est utilisé lors des conversions depuis l'UTF-8 vers l'ISO 8859-15 ?
Au passage, après avoir copié collé ce fameux caractère dans l'éditeur du forum, après une prévisualisation, il avait été interprété par suivit de 8226... l'équivalent décimal de l'hexa décimal 2022, le code de caractère •.
Cette théorie de la 'table de backup' me semble tirée par les cheveux, mais cela expliquerait tout :
1 - lancement de la conversion
2 - obtention du code hexa 95
3 - transcodification pour obtenir le code hexa 'affichable' 2022
4 - échec de la conversion car 2022 est bien trop élevé pour l'ISO 8859-15
Qu'en pensez vous ? J'ai peut-être commis un erreur énorme quelque part, la réponse est peut-être grosse comme le nez au milieu du visage (c'est même probable), mais je ne vois pas.
Je suis à la recherche de toute aide possible. Merci beaucoup de m'avoir lu ! ;)
Mogz
A voir également:
- Problème de conversion UTF-8 vers ISO 8859-15
- Clé windows 8 - Guide
- Power iso 32 bit - Télécharger - Gravure
- Fichier iso - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Macos 15 - Accueil - MacOS
3 réponses
J'avais le même soucis...
j'ai simplement utilisé les codes basiques pour les caractères genre:
À À
à à
 Â
â â
Ç Ç
ç ç
È È
è è
É É
é é
Ê Ê
ê ê
Mais bon... sauf si c'est ton hébergeur qui te force l'ISO... préfers tout de même l'UTF8
j'ai simplement utilisé les codes basiques pour les caractères genre:
À À
à à
 Â
â â
Ç Ç
ç ç
È È
è è
É É
é é
Ê Ê
ê ê
Mais bon... sauf si c'est ton hébergeur qui te force l'ISO... préfers tout de même l'UTF8
Correction d'une coquille : le code du signe € obtenu en ISO 8859-15 est bien évidement A4 et non 9A.
Et j'ajoute que l'idée de la table de backup m'est venu en constatant que les plages ISO avec de grand indices contenaient souvent des caractères comme celui qui me pose problème.
(Poster trop vite c'est mal)
Et j'ajoute que l'idée de la table de backup m'est venu en constatant que les plages ISO avec de grand indices contenaient souvent des caractères comme celui qui me pose problème.
(Poster trop vite c'est mal)