Prise en charge de plusieurs langues et des emojis dans les fonctionnalités du service de langage

La prise en charge multilingue et d’emojis a conduit à des encodages Unicode qui utilisent plusieurs points de code pour représenter un seul caractère affiché, appelé graphème. Par exemple, des emojis tels que 🌷 et 👍 peuvent utiliser plusieurs caractères pour composer la forme, avec des caractères supplémentaires pour des attributs visuels tels que le teint de la peau. De même, le mot Hindi अनुच्छेद est encodé sous la forme de cinq lettres et de trois marques qui se combinent.

En raison des différentes longueurs d’encodage de plusieurs langues et des emojis possibles, les fonctionnalités du service de langage peuvent retourner des décalages dans la réponse.

Décalages dans la réponse de l’API

Chaque fois que des décalages sont retournés par la réponse de l’API, rappelez-vous de ce qui suit :

  • Les éléments de la réponse peuvent être spécifiques du point de terminaison appelé.
  • Les charges utiles HTTP POST/GET sont encodées au format UTF-8, qui peut être ou non l’encodage de caractères par défaut sur votre compilateur ou système d’exploitation côté client.
  • Les décalages font référence aux nombres de graphèmes selon la norme Unicode 8.0.0, non aux nombres de caractères.

Extraction de sous-chaînes d’un texte avec des décalages

Les décalages peuvent occasionner des problèmes lors de l’utilisation de méthodes de sous-chaîne basées sur des caractères, par exemple, la méthode .NET substring(). Un problème est qu’un décalage peut avoir pour effet qu’une méthode de sous-chaîne se termine au milieu d’un encodage de graphème de plusieurs caractères plutôt qu’à la fin.

Dans .NET, envisagez d’utiliser la classe StringInfo, qui vous permet d’utiliser une chaîne comme une série d’éléments textuels, plutôt que d’objets caractères individuels. Vous pouvez également rechercher des bibliothèques de fractionnements de graphèmes dans votre environnement logiciel de prédilection.

Les fonctionnalités du service de langage retournent également ces éléments textuels, pour des raisons pratiques.

Les points de terminaison qui retournent un décalage prennent en charge le paramètre stringIndexType. Ce paramètre ajuste les attributs offset et length dans la sortie de l'API pour qu'ils correspondent au schéma d'itération de chaîne demandé. Actuellement, trois types sont pris en charge :

  • textElement_v8 (par défaut) : itération sur les graphèmes, comme défini par la norme Unicode 8.0.0
  • unicodeCodePoint : itération sur les points de code Unicode, le schéma par défaut pour Python 3
  • utf16CodeUnit : itération sur les unités de code UTF-16, le schéma par défaut pour JavaScript, Java et .NET

Si le stringIndexType demandé correspond à l'environnement de programmation de votre choix, l'extraction de sous-chaîne peut être effectuée à l'aide des méthodes substring ou slice standard.

Voir aussi