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 | 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]
- ↑ http://perldoc.perl.org/perlunicode.html#Important-Caveats
- ↑ docs.oracle.com/cd/B10501_01/server.920/a96524/c13datyp.htm