Qu'est-ce que l'UTF-8 ? Pourquoi les Emoji et les accents prennent plus de place
UTF-8 est l'encodage qui exécute le Web moderne, presque toutes les pages Web, bases de données et API l'utilisent. La plupart du temps, cela fonctionne de manière invisible, mais cela explique une énigme qui surprend les gens : pourquoi un court message rempli d'emoji peut être "trop gros" pour un champ pouvant contenir un message plus long en texte brut. Voici UTF-8 expliqué simplement et pourquoi c'est important.
Qu'est-ce que l'UTF-8
UTF-8 est un moyen de représenter les caractères de texte sous forme d'octets, les unités que les ordinateurs stockent et transmettent réellement. Chaque caractère que vous tapez doit devenir une séquence d'octets, et UTF-8 est le système standard pour ce faire. Sa conception intelligente est qu'il est à largeur variable : différents caractères occupent différents nombres d'octets. Cela lui permet de représenter chaque caractère dans chaque langue et chaque emoji, tout en gardant un texte anglais simple et compact. Il est devenu le codage dominant précisément parce qu’il est à la fois universel et efficace pour le texte courant.
Pourquoi certains caractères prennent plus d'octets
Voici l’idée clé. UTF-8 utilise un octet pour les caractères de base, les lettres anglaises, les chiffres et la ponctuation courante. Mais les caractères en dehors de cet ensemble de base prennent plus de temps : la plupart des lettres latines accentuées et de nombreux symboles prennent deux octets, une large plage comprenant des caractères chinois, japonais et coréens prend trois octets, et le reste, y compris la plupart des emoji, prend quatre octets. La taille en octets de votre texte dépend donc entièrement des caractères qu'il contient. L'anglais simple correspond à un octet par caractère ; les emoji sont quatre.
Pourquoi c'est important pour les limites
La largeur variable explique pourquoi le nombre de caractères et le nombre d'octets peuvent différer, et pourquoi cela est important. De nombreuses limites, champs de base de données, charges utiles réseau, certaines tailles de requêtes API, sont mesurés en octets et non en caractères. Un champ de 100 octets contient 100 caractères anglais simples, mais seulement 50 caractères s'il s'agit de lettres accentuées de deux octets, ou 25 s'il s'agit d'emoji de quatre octets. C’est exactement pourquoi un message visuellement court et riche en emojis peut être rejeté comme étant trop long alors qu’un message en texte brut plus long convient. Ce sont les octets, et non les caractères, qui atteignent la limite.
La surprise des emojis
Les emoji méritent une attention particulière car ils sont ceux qui suscitent le plus de confusion. La plupart des emoji font quatre octets en UTF-8, soit autant d'espace que quatre lettres simples. Et certains emoji sont construits en combinant plusieurs points de code : un drapeau, une variante de couleur de peau ou un emoji familial peuvent contenir plusieurs octets, parfois plus d'une douzaine. Ainsi, un seul emoji visible peut occuper beaucoup plus d’espace qu’il n’y paraît. Si un message court rempli d'emojis a déjà été rejeté parce qu'il était trop long, cette réalité multi-octets à largeur variable en est la raison.
Les plats pratiques à emporter
Vous avez rarement besoin de penser directement à UTF-8, mais le savoir explique le comportement réel. Lorsqu'une limite est en caractères, comptez les caractères. Lorsqu'il est en octets, dans de nombreux contextes techniques, rappelez-vous que les accents doublent et les emoji quadruplent le coût en octets, alors vérifiez la taille réelle de l'octet si votre texte n'est pas en anglais simple. Voir à la fois le nombre de caractères et la taille des octets supprime les conjectures et évite le rejet déroutant « mais cela semblait assez court ».