Coder avec Unicode/Conventions

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

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

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

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

PHP modifier

Python modifier

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

Vala modifier

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

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

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