Types de Caractères en Programmation

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 et ISO 8895-1 sont égals dans l’étendue 160..255

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
Déclaration des caractères dans XML

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.

Déclaration des caractères dans HTML

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.

Caractères définis par l’IANA

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.

Delphi 2009 et Unicode – Char est maintenant WideChar

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.

Exprimez vous!

*