Suporte multilinngue e emoji nas funcionalidades do Serviço de idiomas
O suporte multilingue e emoji levou a codificações Unicode que utilizam mais do que um ponto de código para representar um único caráter apresentado, denominado grafo. Por exemplo, emojis como 🌷 e 👍 podem utilizar vários carateres para compor a forma com carateres adicionais para atributos visuais, como o tom de pele. Da mesma forma, a palavra अनुच्छेद
hindi é codificada como cinco letras e três marcas de combinação.
Devido aos diferentes comprimentos de possíveis codificações multilingues e emojis, as funcionalidades do Serviço de idiomas podem devolver desvios na resposta.
Desvios na resposta da API
Sempre que forem devolvidos desvios à resposta da API, lembre-se:
- Os elementos na resposta podem ser específicos do ponto final que foi chamado.
- Os payloads HTTP POST/GET estão codificados em UTF-8, que pode ou não ser a codificação de carateres predefinida no seu compilador ou sistema operativo do lado do cliente.
- Os desvios referem-se a contagens de grafos com base no padrão Unicode 8.0.0 , não contagens de carateres.
Extrair subcadeias do texto com desvios
Os desvios podem causar problemas ao utilizar métodos de subcadeia baseados em carateres, por exemplo, o método .NET substring( ). Um problema é que um desvio pode fazer com que um método de subcadeia termine no meio de uma codificação de grafo com vários carateres em vez do fim.
No .NET, considere utilizar a classe StringInfo , que lhe permite trabalhar com uma cadeia como uma série de elementos textuais, em vez de objetos de carateres individuais. Também pode procurar bibliotecas de divisor de grafos no seu ambiente de software preferido.
As funcionalidades do serviço Idioma também devolvem estes elementos textuais, por conveniência.
Os pontos finais que devolvem um desvio suportarão o stringIndexType
parâmetro . Este parâmetro ajusta os offset
atributos e length
na saída da API para corresponder ao esquema de iteração de cadeia pedido. Atualmente, suportamos três tipos:
textElement_v8
(predefinição): itera grafos conforme definido pela norma Unicode 8.0.0unicodeCodePoint
: itera através de Pontos de Código Unicode, o esquema predefinido para Python 3utf16CodeUnit
: itera através de Unidades de Código UTF-16, o esquema predefinido para JavaScript, Java e .NET
Se o stringIndexType
pedido corresponder ao ambiente de programação escolhido, a extração de subcadeia pode ser efetuada através de subcadeia padrão ou métodos de segmentação de dados.