char *s
s[...]
,
par incrémentation du pointeurstring
; s[...]
.s[...]
.java.lang.String
,charAt(...)
.length()
ou string-length()
,
ou strlen()
, suivant les langages) est-elle le nombre des octets qui la composent,
ou bien celui de ses caractères (p.ex. chinois) ?s[k]
(ou par charAt(k))
conduit-il au k-ième octet ou au k-ième caractère (chinois) ?char
,
c'est-à-dire une donnée codée sur un octet, interprétée comme un entier
signé). Les string de type « string » sont des chaînes d'éléments de type «
char » [...]
On le voit bien si l'on utilise les différentes "sortes" de caractères
de c++11 (la norme publiée en août 2011).
Dans c++11, on peut déclarer des « wstring » qui sont alors des chaînes de
« wchar_t »,
« wchar_t » étant maintenant un type (et pas comme précédemment défini
par une macro).
Le nombre d'octets occupé par un « wchar_t » n'est pas défini dans le
langage, mais par le compilateur.
On peut fixer le nombre d'octets dans « wide character » par les
nouveaux types char16_t et char32_t
et déclarer des « u16string » et des « u32string », où length = nb d'éléments du type de car. déclaré.
use byte
, use utf8
, etc, ainsi que la spécification de l'encodage dans les entrées-sorties.mb_strlen($chn, 'UTF-8')
donnera la longueur de $chn
supposée contenir de l'UTF-8.String
(chaînes de char
) et la notion de tableau d'octets byte array (byte[]
).charAt()
de la classe String
renvoie un char
, et length()
donne la longueur en char
.char
est fondé explicitement sur le plan de base du catalogue Unicode (n°s sur 16 bits).char
, en spécifiant que ce type occuperait 16 bits, et n'a pas changé depuis, malgré l'évolution d'Unicode.