Guide JavaScript 1.5:Unicode
Un article de MDC.
Sommaire |
[modifier] Unicode
Unicode est un standard universel en matière de codage de caractères, qui garantit l'affichage et l'échange des principales langues écrites. Unicode prend en charge les langues d'Amérique, d'Europe, du Moyen-Orient, d'Afrique, de l'Inde, d'Asie et du Pacifique, ainsi que quelques écritures historiques et des symboles techniques. Unicode autorise aussi bien l'échange, le traitement et l'affichage de textes multilingues que l'emploi de symboles techniques ou mathématiques courants. Son ambition est de résoudre les problèmes d'internationalisation inhérents à l'informatique multilingue, tels que les problèmes liés à la variété des standards nationaux en matière de codage de caractères. Toutes les écritures modernes ou archaïques ne sont cependant pas encore totalement prises en charge.
Le jeu de caractères Unicode peut être utilisé pour tous les encodages connus. Unicode est construit à partir du jeu de caractères ASCII (American Standard Code for Information Interchange). Unicode associe une valeur numérique et un nom à chaque caractère. Le codage de caractères utilisé spécifie quant à lui l'identité de chaque caractère ainsi que sa valeur numérique (sa position codée) et sa représentation en bits. La valeur numérique, codée sur 16 bits (valeur codée), est définie par un nombre hexadécimal et un préfixe U; à titre d'exemple, U+0041 représente la lettre A. Le nom unique associé à cette valeur est LATIN CAPITAL LETTER A (LETTRE MAJUSCULE LATINE A).
Unicode n'est pas pris en charge par les versions de JavaScript antérieures à la version 1.3.
[modifier] Compatibilité d'Unicode avec ASCII et ISO
Unicode est entièrement compatible ISO/IEC 10646-1; 1993, un standard international faisant partie de la norme ISO 10646.
Plusieurs standards dédiés au codage (tels que UTF-8, UTF-16 et ISO UCS-2) sont utilisés afin de représenter physiquement les caractères Unicode en bits.
Le codage UTF-8 d'Unicode est compatible avec les caractères ASCII et est pris en charge par de nombreux programmes. Les 128 premiers caractères Unicode correspondent aux caractères ASCII et possèdent la même valeur sont codés de la même façon sur un octet. Les caractères Unicode U+0020 à U+007E sont équivalents aux caractères ASCII 0x20 à 0x7E. Contrairement à ASCII, qui prend en charge uniquement l'alphabet latin et utilise un jeu de caractères codés sur 7 bits, UTF-8 peut utiliser de un à quatre octets pour la représentation de chaque caractère. Ceci permet la représentation de millions de caractères. Un autre standard dédié au codage, UTF-16, utilise deux octets pour la représentation des caractères Unicode. Une séquence d'échappement permet avec UTF-16 de représenter n'importe quel caractère Unicode sur quatre octets.
Le standard ISO UCS-2 (Universal Character Set) utilise deux octets (ou 16 bits).
JavaScript et Mozilla prennent en charge UTF-8/Unicode ; cela signifie que vous pouvez utiliser des caractères non-latins, internationaux et localisés (plus quelques symboles techniques spéciaux) dans vos programmes JavaScript. Unicode fournit une méthode standard de codage de textes multilingues. Comme le codage UTF-8 d'Unicode est compatible ASCII, les programmes peuvent aussi utiliser des caractères ASCII. Vous pouvez utiliser des caractères Unicode non-ASCII dans les commentaires, les chaînes littérales, les identifiants et les expressions régulières de JavaScript.
[modifier] Séquences d'échappement Unicode
Vous pouvez utiliser la séquence d'échappement Unicode à l'intérieur des chaînes littérales, des expressions régulières et des identifiants. La séquence d'échappement est constituée de six caractères ASCII : \u et un nombre hexadécimal à quatre chiffres. À titre d'exemple, \u00A9 représente le symbole « copyright ». En JavaScript, chaque séquence d'échappement Unicode est interprétée comme un caractère.
Le code suivant renvoie le symbole « copyright » et la chaîne « Netscape Communications ».
x = "\u00A9 Netscape Communications"
Le tableau suivant dresse la liste des caractères spéciaux fréquemment utilisés ainsi que leur valeur Unicode associée.
| Catégorie | Valeur Unicode | Nom | Nom du format |
|---|---|---|---|
| Blancs | \u0009 |
Tabulation | <TAB> |
\u000B |
Tabulation verticale | <VT> | |
\u000C |
Saut de page | <FF> | |
\u0020 |
Espace | <SP> | |
| Fins de ligne | \u000A |
Saut de ligne | <LF> |
\u000D |
Retour chariot | <CR> | |
| Autres | \u0008 |
Retour arrière | <BS> |
\u0009 |
Tabulation horizontale | <HT> | |
\u0022 |
Guillemet double | " | |
\u0027 |
Guillemet simple | ' | |
\u005C |
Antislash | \ |
Tableau 2.2 : Valeurs Unicode de quelques caractères spéciaux
L'emploi qui est fait par JavaScript de la séquence d'échappement Unicode est différent de celui de Java. En JavaScript, la séquence d'échappement n'est jamais interprétée en tant que caractère spécial en début de phase d'interprétation. À titre d'exemple, une séquence d'échappement correspondant à une fin de ligne, à l'intérieur d'une chaîne, ne termine pas la chaîne avant son interprétation par la fonction. JavaScript ignore de plus les séquences d'échappement au sein des commentaires. En Java, si une séquence d'échappement est utilisée dans un commentaire sur une seule ligne, celle-ci est interprétée comme un caractère Unicode. À l'intérieur d'une chaîne littérale, le compilateur Java interprète en premier lieu les séquences d'échappement. Par exemple, si une séquence d'échappement correspondant à une fin de ligne (\u000A) est utilisée en Java, elle termine la chaîne littérale et cela conduit à une erreur car en Java les fins de ligne spécifiées avec séquences d'échappement Unicode ne sont pas autorisées dans les chaînes littérales. Il est uniquement possible d'utiliser \n pour changer de ligne au sein d'une chaîne littérale. En JavaScript, par contre, la séquence d'échappement fonctionne exactement comme \n.
[modifier] Caractères Unicode dans les fichiers JavaScript
Les premières versions de Gecko supposaient que le codage de caractères des fichiers JavaScript chargés à partir de XUL était le codage Latin-1. À partir de Gecko 1.8, le codage de caractères est déduit du codage du fichier XUL. Veuillez voir la page Caractères internationaux dans du JavaScript XUL pour plus d'informations.
[modifier] Afficher des caractères Unicode
Vous pouvez utiliser Unicode pour afficher les caractères de différentes langues, ou encore des symboles techniques. Pour que les caractères soient affichés correctement, le client (comme Mozilla Firefox ou Netscape) doit prendre en charge Unicode. De plus, une police Unicode appropriée doit être disponible pour le client et la plateforme sous-jacente doit prendre en charge Unicode. Souvent, les polices Unicode ne peuvent pas afficher tous les caractères Unicode. De plus, certaines plateformes comme Windows 95 n'offrent de plus qu'une prise en charge partielle d'Unicode.
Pour recevoir une entrée composée de caractères non-ASCII, le client doit envoyer cette entrée en utilisant le codage Unicode. Avec un clavier étendu standard, le client ne peut pas entrer facilement les caractères supplémentaires pris en charge par Unicode. Quelques fois, le seul moyen d'entrer des caractères Unicode est d'utiliser des séquences d'échappement Unicode.
Pour plus d'informations sur Unicode, consultez le site Web du consortium Unicode et le standard Unicode, version 2.0 (publié en anglais chez Addison-Wesley en 1996 sous le titre The Unicode Standard, Version 2.0).