Tu as identifié un manque sur le marché des médias sociaux pour les publications très très courtes. Maintenant que Twitter autorise les publications de 280 caractères, les personnes qui veulent des mises à jour rapides sur les réseaux sociaux ne sont pas servies. Tu décides de créer ton propre réseau social.
Pour rendre ton produit remarquable, tu le rends extrême et tu n'autorises que les publications de 5 caractères ou moins. Toute publication de plus de 5 caractères doit être tronquée à 5.
Pour permettre à tes utilisateurs de s'exprimer pleinement, tu autorises les emoji et les autres caractères Unicode.
La tâche consiste à tronquer à 5 caractères les strings fournies en entrée.
Un texte stocké sous forme numérique doit être converti en une série d'octets. Il existe 3 façons courantes de faire correspondre des caractères à des octets.
UTF-8 et UTF-16 sont tous deux des encodages Unicode, ce qui signifie qu'ils peuvent représenter une immense variété de caractères, notamment :
UTF-8 et UTF-16 sont tous deux des encodages à longueur variable, ce qui signifie que différents caractères occupent une quantité d'espace différente.
Prenons la lettre « a » et l'emoji « 😛 ». En UTF-16, la lettre occupe 2 octets, mais l'emoji en occupe 4.
L'astuce de cet exercice consiste à utiliser des API conçues autour des caractères Unicode (points de code) plutôt que des unités de code Unicode.
Une string encodée en UTF-16 « normale » peut être représentée comme une série de caractères, où chaque caractère peut faire jusqu'à 16 bits de long (d'où le nom UTF-16). Cela signifie qu'il y a au maximum 2¹⁶ (deux à la puissance seize), soit 65536 caractères possibles représentables avec 16 bits, soit 1 unité de code. Ces 65536 caractères forment ce qu'on appelle le plan multilingue de base, ce qui est largement suffisant pour les caractères les plus courants de la plupart des langues.
Cependant, certains symboles ne tiennent pas dans une seule unité de code. La solution est de les représenter avec deux unités de code. Ces deux unités de code UTF-16, souvent appelées aussi surrogate pair, forment un point de code.
Donc, en résumé, quand on parle d'encodage UTF-16 :
code unit correspond à 16 bits (ou moins) représentant un seul caractère.code point est une ou deux unités de code qui représentent un seul caractère.Pour ajouter à la confusion, il y a aussi les grapheme clusters, qui sont en gros des séquences de caractères Unicode (points de code) qu'il faut traiter comme une seule unité visuelle. Par exemple, certains émojis, comme celui-ci 👨👦.
La plupart des méthodes JavaScript intégrées fonctionnent avec des strings encodées en UTF-16, mais elles se basent sur les unités de code UTF-16.
Par exemple, la méthode String.prototype.split("") découpe une string en unités de code.
En revanche, les String iterators itèrent par points de code.
Tu peux en lire beaucoup plus, et trouver des exemples sur les strings Unicode, sur MDN.
Inscris-toi sur Exercism pour apprendre et maîtriser JavaScript avec 37 concepts159 exercices, et un vrai mentorat humain, le tout gratuitement.