Compatibilidad con varios idiomas y con emojis en características del servicio de lenguaje
La compatibilidad con varios idiomas y con Emojis ha dado lugar a codificaciones Unicode que usan más de un punto de código para representar un solo carácter mostrado, llamado grafema. Por ejemplo, los Emojis como 🌷 y 👍 pueden utilizar varios caracteres para crear la forma con caracteres adicionales para los atributos visuales, como el tono de máscara. Del mismo modo, la palabra Hindi अनुच्छेद
está codificada como cinco letras y tres marcas de combinación.
Debido a las distintas longitudes de posibles codificaciones de varios idiomas y emojis, las características del servicio de lenguaje pueden devolver desplazamientos en la respuesta.
Desplazamientos en la respuesta de la API
Siempre que se devuelvan desplazamientos a la respuesta de la API, recuerde lo siguiente:
- Los elementos de la respuesta pueden ser específicos del punto de conexión al que se llamó.
- Las cargas de HTTP POST/GET están codificadas en UTF-8, que puede ser o no la codificación de caracteres predeterminada del compilador del lado cliente o sistema operativo.
- Los desplazamientos hacen referencia a recuentos de grafemas basados en el estándar Unicode 8.0.0, no recuentos de caracteres.
Extracción de subcadenas de texto con desplazamientos
Los desplazamientos pueden causar problemas al usar métodos substring basados en caracteres, por ejemplo el método substring() de .NET. Un problema es que un desplazamiento puede hacer que un método substring finalice en mitad de una codificación de grafemas de carácter múltiple en lugar de al final.
En .NET, tenga en cuenta el uso de la clase StringInfo, que le permite trabajar con una cadena como una serie de elementos textuales, en lugar de objetos de caracteres individuales. También puede buscar bibliotecas del separador de grafemas en su entorno de software preferido.
Las características del servicio de lenguaje también devuelven estos elementos textuales, para mayor comodidad.
Los puntos de conexión que devuelven un desplazamiento admitirán el parámetro stringIndexType
. Este parámetro ajusta los atributos offset
y length
en la salida de la API para que coincidan con el esquema solicitado de iteración de cadena. Actualmente, se admiten tres tipos:
textElement_v8
(valor predeterminado): itera por los grafemas, tal y como se define en Unicode Standard 8.0.0.unicodeCodePoint
: itera por los puntos de código Unicode, el esquema predeterminado para Python 3.utf16CodeUnit
: itera por las unidades de código UTF-16, el esquema predeterminado para JavaScript, Java y .NET.
Si el elemento stringIndexType
solicitado coincide con el entorno de programación de su elección, la extracción de subcadenas se puede realizar mediante los métodos estándar substring o Slice.