À la découverte d'Unicode/Programmation

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
À la découverte d'Unicode
À la découverte d'Unicode
Sommaire

Sommaire

Le contexte

Les textes Unicode

Pour les développeurs

Annexes

Si ce livre veut s'adresser à un lectorat néophyte, cette section s'adresse plus particulièrement à toutes les personnes qui travaillent dans les métiers liés au développement logiciel.

Bibliothèques logicielles[modifier | modifier le wikicode]

ICU[modifier | modifier le wikicode]

La bibliothèque logicielle multi plate-forme ICU permet de manipuler des données unicodées.

Elle est en particulier utilisée à partir de LibreOffice 4.0[1].

Le langage[modifier | modifier le wikicode]

Un support d’Unicode spécifique à certaines plates-formes (non compatible quant au code-source) est également fourni par les systèmes modernes (Java, MFC, GNU/Linux).

Les types à utiliser pour stocker des variables Unicode, sont les suivants :

Types compatibles avec Unicode dans les langages de programmation
Langage de programmation Type pour le codage d'un seul caractère ou d'une partie de caractère Type pour le codage d'un texte quelconque
C char[4][alpha 1] ou wchar_t[2][alpha 2] char[] ou wchar_t[]
C++ char[4][alpha 1] ou wchar_t[2][alpha 2] char[] ou wchar_t[] ou std::string ou std::wstring
Java char[2] ou int[alpha 3] char[] ou String
Bibliothèque ICU (pour C/C++ ou Java) UChar UChar[] ou String, UnicodeString
JavaScript ou ECMAScript char[alpha 4] string
C# ou J# char string
Delphi char[4][alpha 1] ou widechar[2] string[alpha 1] ou widestring
Python unicode
Vala uint8[alpha 5] ou char[alpha 6] ou unichar[alpha 7] string[2]

Notes du tableau alpha

  1. 1,0 1,1 1,2 et 1,3 En UTF-8
  2. 2,0 et 2,1 On notera toutefois que le type wchar_t du langage C ne permet pas toujours de coder tous les caractères Unicode, car la norme de ce langage ne prévoit pas de nombre minimum suffisante pour ce type standard. Cependant de nombreux compilateurs du langage définissent wchar_t sur 32 bits (voire 64 bits sur les environnements manipulant les entiers standards sur 64 bits), ce qui suffit pour stocker n’importe quel point de code Unicode normalisé. Mais d’autres compilateurs représentent wchar_t sur 16 bits (notamment sous Windows en environnement 16 ou 32 bits), voire sur 8 bits seulement (notamment dans les environnements embarqués ne disposant pas d’un système d’exploitation d’usage général) car wchar_t peut utiliser la même représentation que le type char qui compte un minimum de 8 bits.
  3. De manière similaire au C et au C++, le langage Java dispose de type unitaire permettant de coder 16 bits, mais ne permettant pas de coder un seul point de code d’une valeur quelconque (le type natif char est un entier positif sur 16 bits seulement). Pour manipuler les caractères normalisés hors du premier plan, il faut utiliser une paire de codets, chacun contenant une valeur égale aux deux codets définis par la forme UTF-16. Aussi les types d’objets String ou char[2] sont les plus appropriés pour représenter un caractère Unicode. Depuis Java 1.4.1, la bibliothèque standard fournit un support complet d’Unicode grâce au type natif int (qui est un entier défini sur 32 bits) et aux méthodes statiques de la classe standard Character (cependant un objet instancié de ce type Character ne permet pas, tout comme le type natif char, de stocker n’importe quel point de code).
  4. JavaScript comporte diverses implémentations non normalisées dont certaines plus anciennes ne supportent pas plus de 16 bits par caractère, et parfois seulement 8 bits. Toutefois la norme ECMAScript de ce langage définit une classe utilitaire Character sur 32 bits (en fait basée sur la classe Number) devant supporter tous les points de code des 17 plans normalisés, tandis que les chaines de caractères utilise des caractères codés obligatoirement sur 16 bits (mais sans restriction renforçant l’appariement des unités de code UTF-16, les chaînes ECMAScript de type String n’étant pas restreintes au seul codage UTF-16 mais étant des vecteurs de constantes entières codées sur 16 bits sans restriction, afin d’assurer l’interopérabilité avec Java et d’autres langages qui eux non plus ne renforcent pas les restrictions de conformité UTF-16 dans leurs types natifs de données). Ces deux langages ne supportent pas de typage explicite des variables, le type étant défini dynamiquement par les valeurs qu’on leur assigne (aussi, plusieurs représentations internes sont possibles, leurs différences étant normalement transparentes pour le programmeur).
  5. un octet
  6. non spécifié
  7. un caractère complet

Autres bibliothèques[modifier | modifier le wikicode]

La bibliothèque Qt permet aussi de gérer Unicode. http://doc.qt.digia.com/qt/unicode.html

Le cas de Linux[modifier | modifier le wikicode]

Dans le cas de Linux, le développement en langage C peut se faire avec de interfaces spécifiques, en 2001 [3].


Notes[modifier | modifier le wikicode]

  1. https://fr.libreoffice.org/telecharger/nouveautes-et-correctifs-de-la-version-4-0/
  2. valadoc.org/#!api=glib-2.0/string
  3. http://www.ibm.com/developerworks/library/l-linuni/index.html Linux Unicode programming How to incorporate and utilize Unicode for foreign language support

Unicode souffre toutefois encore d’un faible support des expressions rationnelles par certains logiciels, même si des bibliothèques comme ICU et Java peuvent les supporter. Un tel support n’a pas encore été standardisé pour ECMAScript et n’est fourni qu’avec l’aide de bibliothèques créées avec le langage ou des interfaces d’interopérabilité avec d’autres systèmes (notamment avec CORBA, COM) ou langages (notamment C++ et Java).

Voir aussi[modifier | modifier le wikicode]