Coder avec Unicode/Structure de donnée
Une chaîne de caractères est à la fois conceptuellement une suite ordonnée de caractères et physiquement une suite ordonnée d'unités de code (code unit). La chaîne de caractères est un type de donnée dans de nombreux langages informatiques (Voir chaîne de caractères sur Wikipédia). Toutefois, la structure interne d'une chaîne peut varier d'un langage à l'autre, notamment sur les unités de code utilisées. Cela peut aussi avoir un impact sur la manière d'écrire les chaînes littérales dans un code source.
Typages
modifierConstantes littérales
modifierSous Visual Studio, il est possible d'écrire :
L"this is a literal string"
Cas du C++
modifier // UTF-8 encoded string:
const char *s3 = u8"Euros \u20AC and G clef \U0001D11E";
const char16_t *s4 = u"Euros \u20AC and G clef \U0001D11E";
// UTF-32 encoded string:
const char32_t *s5 = U"Euros \u20AC and G clef \U0001D11E";
std::u16string s6 = s4; // u16string = basic_string<char16_t>
std::u32string s7 = s5; // u32string = basic_string<char32_t>
Typages
modifierEn Python, les types de données sont str et unicode.
str correspond à une chaîne d'octets.
En python 2, l'utilisation de l'Unicode s'avère assez complexe pour le néophyte. La version 3 améliore grandement ces désavantages.
Constantes littérales
modifierEn Python 2, les chaînes de caractères unicode littérales sont introduites par la lettre u.
Exemple[1] :
>>> unichr(40960)
u'\ua000'
>>> ord(u'\ua000')
40960
Python 2
modifierEn python 2, le codage des caractères dépend de l'environnement logiciel utilisé, dans le cas d'un système windows.
import sys
print sys.stdin.encoding ## cp1252 sous IDLE, cp850 sous la console Python
machaine = 'äâ' ## machaine est une chaîne encodée selon l'encodage sys.stdin.encoding
unicode(machaine, sys.stdin.encoding) ## u'\xe4\xe2'
Pour déclarer une chaine Unicode, vous devez la commencer par u. Si vous voulez insérer un caractère Unicode, il vous faut alors saisir le caractère Unicode correspondant
Exemple :
nationalites = [] # nous déclarons ici une liste de nationalités
nationalites.append(u"am\u00E9ricain") # nous ajoutons la nationalité américaine à cette liste
Constantes littérales
modifierExemple [2].
my $smiley = "\x{263a}";
$smiley =~ /\x{263a}/;
my $hebrew_alef = chr(0x05d0);
use charnames ':full';
my $arabic_alef = "\N{ARABIC LETTER ALEF}";
Voir aussi en:Perl Programming/Unicode UTF-8.
print gettype('e'); //string
print gettype('é'); //string
Par défaut, l'encodage des fichiers sources en Java est celui de la plateforme du compilateur.
L'option encoding du compilateur permet de spécifier l'encodage des fichiers sources compilés. L'exemple suivant montre l'utilisation de cette option pour un fichier encodé en UTF-8, sans BOM (Byte Order Mark).
javac -encoding "UTF-8" Test.java
Il est donc recommandé de coder en ASCII 7 bits (0x20 à 0x7E) et d'utiliser la séquence \u
suivie des 4 chiffres hexadécimaux du code Unicode.
String s = "L\u00E0 o\u00F9 est situ\u00E9 le caract\u00E8re.";
char c = '\u20AC';
System.out.println(s);
Cette séquence peut aussi être utilisée en dehors des chaînes de caractères, mais ceci n'est pas recommandé :
System.out.\u0070rintln("L\u00E0 o\u00F9 est situ\u00E9 le caract\u00E8re.");
A priori, type String de javascript contient du texte dans un encodage donné. En particulier, cet encodage peut-être lié à UTF-16.[3].
Vala
modifierTypage
modifierEn Vala, les chaînes sont enregistrées au moyen de la classe string
Constantes littérales
modifier dostream.put_string ("ΑαΒβΓγΔδΕεΖζΗηΘθ\n");
dostream.put_string ("ΙιΚκΛλΜμΝνΞξΟοΠπ\n");
dostream.put_string ("ΡρΣσΤτΥυΦφΧχΨψΩω\n");
PL/SQL
modifierPlusieurs familles de types de textes existent :
codage | nombre fixé de caractères | nombre variable de caractères |
---|---|---|
caractère | CHAR | VARCHAR2 |
caractère unicode (cf À la découverte d'Unicode ) | NCHAR | NVARCHAR2 |
Notes
modifier- ↑ http://docs.python.org/2/howto/unicode.html
- ↑ http://perl.enstimac.fr/DocFr/perluniintro.html
- ↑ Par exemple, Ecma 262 indique en §4.3.16 qu'une String value qui est une séquence d'entiers 16 bits non signés. Chaque multiplet de 16-bits est une unité de code de texte UTF-16. ECMAScript ne contraint pas ces valeurs. À ce sujet on pourra consulter le livre À la découverte d'Unicode.