En programmation, les types de caractères utilisés dans les documents ont une importance capitale. Comme référence, j’ai monté ce tableau et ajouté quelques notes qui me sont utiles.
Nom | Bytes/Car. | Description | Étendue | Code IANA |
---|---|---|---|---|
7-bit ASCII 7-bit US-ASCII |
1 | La mère de tous les caractères. Contient 32 caractères invisibles pour le contrôle, les lettres latines A-Z, a-z, les chiffres arabes 0-9 et beaucoup de caractères de ponctuations. | 0..127 | US-ASCII |
Caractères Unicode | ||||
Unicode, ISO 10646 | N.A. | Code universel pour tous les caractères imaginables. Défini le caractère, lui assigne une valeur scalaire, mais ne défini pas comment le caractère doit être rendu graphiquement ou placé en mémoire. | U+0000.. U+100000 |
N.A. |
UTF-8 | 1..6 | Une variante de l’Unicode qui utilise 1 byte pour tous les caractères 7-bit US-ASCII et des séquences jusqu’à 4 bytes pour tous les caractères unicodes. | Tous les caractères Unicode | UTF-8 |
UCS-2 | 2 | Une variante de l’Unicode qui utilise 2 bytes (16 bits) pour chaque caractère. Ce format n’est pas en mesure d’assigner une valeur scalaire à tous les caractères Unicode et est donc déclassé. | U+0000.. U+FFFF |
ISO-10646-UCS-2 |
UTF-16 | 2 | Un format eploitant le concept « Surrogate Pairs » [1], qui utilise 2 Bytes (16 bits) pour chaque caractère. Supporte tous les caractères Unicode. Ce faisant, chaque caractère est codé sur une suite de un ou deux mots de 16 bits. | Tous les caractères Unicode | UTF-16 |
UCS-4 UTF-32 | 4 | Une variante Unicode qui utilise 4 bytes (32 bits) pour chaque caractère. UCS-4 et UTF-32 sont les seuls formats capables de rendre tous les caractères sans exception en format long, utile par exemple pour traiter les APIs. UCS-4 et UTF-32 sont techniquement semblables. |
Tous les caractères Unicode | ISO-10646-UCS-4 UTF-32 |
Caractères d’un seul Byte | ||||
ISO 8859-x | 1 | Une extension de US-ASCII utilisant le codage de caractères sur 8 bits. | 0..127 160..255 | ISO-8859-x |
Windows 125x | 1 | Semblable à ISO 8859-x sauf quelques caractères et ajout de caractères additionnels dans l’étendue 128..159. | 0..255 | windows-125x |
Ensemble de Caractères ISO 8859-x
Ces caractères sont une extension de l’ ASCII où le 8ième bit est utilisé. L’étendue 0..127 est identique à celle de l’ US-ASCII [Pour contrepartie Linux voir cette référence].
Nom | Familier | Familles de langues | Contrepartie MS Windows |
---|---|---|---|
ISO 8859-1 | Latin-1 | Langues européennes de l’Est et de l’Ouest (Anglais, Alemand, Français, Espagnol, Portugais, etc.)
Largement utilisé (Europe, Ameriques, Australie, Afrique), donc parmi les caractères les plus communs sur le net. |
windows-1252 |
ISO 8859-2 | Latin-2 | Langues de l’Europe de l’Est et Central (Tchèque, Slovaque, Polonais, etc.) | windows-1250 |
ISO 8859-3 | Latin-3 | Europe du Sud, Malte, Esperanto | |
ISO 8859-4 | Latin-4 | Europe du Nord | |
ISO 8859-5 | Cyrillic | Russie, Ukrainien | windows-1251 |
ISO 8859-6 | Arabic | Arabe | windows-1256 |
ISO 8859-7 | Greek | Grec moderne | windows-1253 |
ISO 8859-8 | Hebrew | Hébeux | windows-1255 |
ISO 8859-9 | Latin-5 | Turque | windows-1254 |
ISO 8859-10 | Latin-6 | Nordique (Sami, Inuit, Icelandais) | |
ISO 8859-11 | Thai | Thai | windows-874 |
ISO 8859-13 | Latin-7 | Baltique | windows-1257 |
ISO 8859-14 | Latin-8 | Celtique | |
ISO 8859-15 | Latin-9 | Langues de l’Europe de l’Ouest. Semblable à ISO 8859-1, plus les symboles Euro (€) et quelques autres caractères. | |
ISO 8859-16 | Latin-10 | Langues Européennes du Sud-Est (Albanais, Croate, Hungrois, Italien, Polonais, Roumain, Slovenien, et aussi le Finlandais, Frençais, Allemand et le gaélique Irlandais) |
Ensembles de caractères MS Windows
Spécifiques à MS Windows, ces caractères sont semblables à l’ISO 8859, mais non tous les mêmes. Alors que l’ISO 8859 n’identifie pas de caractères dans l’étendue 128..159, MS Windows le fait. Les caractères de 0..127 sont identiques à l’US-ASCII. La plupart des caractères de 160..255 sont les mêmes que ceux de l’ISO 8859. Pour Linux voir ces informations.
Numéro | Nom |
---|---|
1250 | Latin 2 |
1251 | Cyrillic |
1252 | Latin 1 |
1253 | Greek |
1254 | Latin 5 |
1255 | Hebrew |
1256 | Arabic |
1257 | Baltic |
1258 | Viet Nam |
874 | Thai |
Chaque document XML doit débuté par la spécification de l’encodage – exemple:
< ?xml version="1.0" encoding="iso-8859-1" ? >
Cette spécification décrit le type de caractère utilisé tout le long du document. On utilise le Code IANA/MIME montré plus haut dans le tableau.
L’en-tête du document HTML doit comprendre le type de caractère utilisé – exemple:
< head >
< meta http-equiv="Content-Type" content="text/html; charset=windows-1252" >
...
< /head >
Sans cette déclaration (et en fait sans aussi n’importe quelle déclaration DOCTYPE), la validationW3C ne pourra pas être faite.
L’Internet Assigned Numbers Authority (IANA) maintient un liste de caractères et codes utilisés sur l’internet. Voir: IANA-CHARSETS Official Names for Character Sets.
Alors que les versions antérieures de Delphi utilisaient le type String basé sur les caractères ANSI de seulement 1 byte de longueur, Delphi 2009 défini un nouveau String basé sur l’Unicode avec le type WideChar d’une longeur de 2 bytes. Delphi 2009 est maintenant 100% compatible Unicode avec la définition d’un nouveau type appelé UnicodeString remplaçant de facto ce qu’était le type String. Auparavant, le type String était synonyme de AnsiString (type de caractère toujours disponible dans Delphi 2009 comme le sont AnsiChar et le pointeur PAnsiChar).
Dans Delphi 2009, les types de caractères sont maintenant Char, AnsiChar et WideChar, où Char est par défaut un WideChar. Avant Delphi 2009, un Char aurait été l’équivalent de AnsiChar. Pour une compilation identique à celle des versions précédentes, on doit changer Char en AnsiChar (et aussi PChar en PAnsiChar).
Les types de String les plus important sous Delphi 2009 sont : UnicodeString, WideString, AnsiString, UTF8String (un AnsiString avec l’encodage UTF-8) et finalement ShortString. Le String par défaut est équivalent à UnicodeString, qui sont des caractères WideChar gérés par Delphi (et non par Windows).
Références additionelles:
Unicode.org Glossary of unicode Terms.
Czyborra.com ISO 8859 Alphabet Soup.
W3schools.com XML Encoding.
Pyzine.com / Michael Foord A Crash Course in Character Encoding (pour Python).
Ubuntu.com Unicode – the Universal Character Set
Marco Cantù Delphi and Unicode.