INF4375 Paradigmes des échanges Internet Encodage de caractères Jacques Berger
Objectifs Comprendre la problématique et les solutions
Prérequis Aucun
Encodage de caractères Ne s'applique qu'aux chaînes de caractères En mémoire Dans un fichier Un fichier texte, c'est une chaîne de caractères
Encodage de caractères Découle de la représentation binaire de la chaîne de caractères Encodages standards Encodages propriétaires
Problème Le web accentue les problèmes d'incompatibilité d'encodage de caractères Plus de communications Plus de composants Plus d'échanges de données
Problème L'interprétation d'une donnée encodée avec un encodage différent Exemple : "Énoncé du TP1" encodé en UTF-8, interprété en Latin1 devient : "Ãnoncà du TP1"
Concepts de base Répertoire Ensemble de symboles Code Tableau de symboles Position : index dans le tableau Assignation d'un numéro de référence
Concepts de base Encodage Algorithme Code <=> chaîne de bits Représentation du code selon une convention binaire
Confusion Langue et encodage Police de caractères
ASCII L'encodage de base à tous les autres Combine le répertoire, le code et l'encodage Répertoire : 128 caractères anglais Code : 0..127
ASCII Encodage Le code est directement traduit en binaire ASCII est encodé sur 7 bits Plusieurs variantes selon le pays d'usage grâce au 8ème bit (ASCII étendu)
ISO-8859-1 (Latin1) Encodage normalisé Contient le code ASCII Rétrocompatible avec ASCII Encodage fait sur un seul octet
ISO-8859-1 (Latin1) Contient les caractères en usage en Europe occidentale Possède une plage de codes réservés
ISO-8859-1 (Latin1) Traduction ASCII vers Latin1 : directe, sans perte Latin1 vers ASCII : directe, avec perte
Windows-1252 (cp-1252) Encodage propriétaire de Microsoft Par défaut avec Windows Semblable mais non identique à Latin1 1252 contient Latin1 Utilise les positions de code réservées de Latin1
Windows-1252 (cp-1252) Traduction ASCII vers 1252 : directe, sans perte 1252 vers ASCII : directe, avec perte
Windows-1252 (cp-1252) Traduction Latin1 vers 1252 : conversion, sans perte 1252 vers Latin1 : conversion, avec perte
Mac Roman Encodage propriétaire d'apple Par défaut sur les machines Apple Semblable mais non identique à Latin1 Contient ASCII Contient une partie seulement de Latin1
Mac Roman Traduction ASCII vers MR : directe, sans perte MR vers ASCII : directe, avec perte
Mac Roman Traduction Latin1 vers MR : conversion, avec perte MR vers Latin1 : conversion, avec perte
Mac Roman Traduction 1252 vers MR : conversion, avec perte MR vers 1252 : conversion, avec perte
Unicode répertoire et code Compatibilité avec UCS (Universal Char Set) UCS est divisé en plans Chaque plan contient des caractères reliés
Unicode répertoire et code BMP contient la majorité des caractères «utiles» Basic Multilingual Plane Les autres plans : plans astraux
Unicode encodage UTF-32 Encode un caractère vers un entier sur 4 octets 4 fois la taille de Latin1 Très volumineux
Unicode encodage UTF-16 Encodage à longueur variable sur 2 ou 4 octets 2 octets : BMP 4 octets : le reste
Unicode encodage UTF-8 Encodage à longueur variable sur 1 à 4 octets 1 octet : ASCII 2 octets : caractères européens 3 octets : le reste du BMP 4 octets : le reste
Unicode encodage UTF-8 Algorithme plus complexe qu'utf-16 et UTF-32 Plus efficace pour les textes anglophones Code source
Unicode encodage UTF-8 Ethnocentrisme Rétrocompatible avec ASCII IETF favorise UTF-8
Unicode Traduction Unicode vers autre : conversion, avec perte Autre vers unicode : conversion, sans perte
Recommandations Si possible, entente entre les deux parties d'une communication Spécifier l'encodage avec les données HTTP, HTML, XML, etc. Utiliser des caractères sécuritaires Éviter les encodages propriétaires
Recommandations Quel encodage choisir? Dépend des caractères les plus communs Taille vs interopérabilité En Amérique du Nord : UTF-8, Latin1, ASCII
Recommandations Pour les échanges web : UTF-8
Plus loin... Table ASCII http://www.asciitable.com/ ISO-8859-1 http://unicode.org/public/mappings/iso8859/8859-1.txt
Plus loin... Windows 1252 http://msdn.microsoft.com/en-us/goglobal/cc305145 Mac Roman http://unicode.org/public/mappings/vendors/apple/roman.txt
Plus loin... Unicode http://unicode.org/