Coder avec Unicode/Conventions

Un livre de Wikilivres.

De par un héritage qui est ce qu'il est, les fonctionnalités Unicode disponibles varient d'un système à l'autre.

  • Sous Unix et Linux en général, le passage à Unicode s'est souvent fait à moindre coût en conservant des API orientées chaînes d'octets et en les utilisant pour du contenu UTF-8.
  • Sous Windows au contraire, l'API Windows a été doublée à l'aide d'un jeu de macroprocédures qui permet par configuration de passer d'une API 8 bits (dite ANSI dans le monde Microsoft) à une API 16 bits (dite Unicode dans le monde Microsoft) pour les chaînes de caractères.

Cette page recense les conventions spécifiques à certains langages.

Perl[modifier | modifier le wikicode]

Depuis la version 5.6 en interne, Perl utilise des unités de code dites larges pour représenter les chaînes[1].

De ce fait, en Perl on distingue la notion de chaîne de caractères de la notion de chaîne d'octets.

C[modifier | modifier le wikicode]

En langage C, historiquement l'unité de code utilisé est dénommé char et représente un multiplet de 7 ou 8 bits. De nos jours, en pratique, le char peut être considéré comme un octet. Ceci conduit à ce que le langage C n'est pas nativement orienté vers unicode, même si l'UTF-8 peut être utilisé nativement. Il est nécessaire d'utiliser les APIs ad hoc en fonction du besoin.

Toutefois, il existe deux formes d’extensions :

  • les extensions de Windows et de Visual Studio qui définissent un mode dit unicode correspondant à des chaînes de 16 bits.
  • les extensions liées aux nouvelles versions des normes du langage.

Java[modifier | modifier le wikicode]

En Java, les chaînes sont représentées par la classe String, alors qu'un caractère isolé est représenté par la classe Char. Ces deux classes reposent sur le type sous-jacent char, une unité de code de 16 bits.

Java utilise l'UTF-16 permettant l'encodage des caractères du plan de base de l'Unicode (0000-FFFF). L'encodage des caractères en dehors de ce plan (10000-10FFFF) exige donc d'utiliser l'encodage par paires de substitution (surrogate pairs en anglais) (D800-DFFF).

JavaScript[modifier | modifier le wikicode]

PHP[modifier | modifier le wikicode]

Python[modifier | modifier le wikicode]

Historiquement, le python s'est développé avec str représentant des chaînes anciennes (8 bits).

Pour l'arrivée de Python 3, le concept unicode a été introduit.


Le langage n'étant que faiblement typé, il convient donc de faire attention aux types de chaînes manipulés.

.NET[modifier | modifier le wikicode]

Vala[modifier | modifier le wikicode]

Vala utilise des chaînes de caractères enregistrées sur des unités de 8 bits (octets). L'API de la classe string est conçue pour l'UTF-8.


PL/SQL[modifier | modifier le wikicode]

Oracle prend en charge de manière fiable les types de données Unicode au travers des types NCHAR, NVARCHAR2, et NCLOB[2].

Références[modifier | modifier le wikicode]

  1. http://perldoc.perl.org/perlunicode.html#Important-Caveats
  2. docs.oracle.com/cd/B10501_01/server.920/a96524/c13datyp.htm