Suporte multilíngue e a emojis em recursos do serviço de idiomas
O suporte multilíngue e a emojis levou a codificações Unicode que usam mais de um ponto de código para representar um único caractere exibido, chamado grafema. Por exemplo, emojis gostam 🌷 e 👍 podem usar vários caracteres para compor a forma com caracteres adicionais para atributos visuais, como tom de pele. Da mesma forma, a palavra अनुच्छेद
hindi é codificada como cinco letras e três marcas combinadas.
Devido aos diferentes comprimentos de possíveis codificações multilíngues e emojis, os recursos do serviço de idioma podem retornar deslocamentos na resposta.
Compensações na resposta da API
Sempre que os deslocamentos forem retornados a resposta da API, lembre-se:
- Os elementos na resposta podem ser específicos para o ponto de extremidade que foi chamado.
- As cargas úteis HTTP POST/GET são codificadas em UTF-8, que pode ou não ser a codificação de caracteres padrão em seu compilador ou sistema operacional do lado do cliente.
- Os deslocamentos referem-se a contagens de grafema baseadas no padrão Unicode 8.0.0 , não a contagens de caracteres.
Extraindo substrings do texto com deslocamentos
Os deslocamentos podem causar problemas ao usar métodos de substring baseados em caracteres, por exemplo, o método .NET substring(). Um problema é que um deslocamento pode fazer com que um método de substring termine no meio de uma codificação de grafema de vários caracteres em vez do final.
No .NET, considere usar a classe StringInfo , que permite que você trabalhe com uma cadeia de caracteres como uma série de elementos textuais, em vez de objetos de caracteres individuais. Você também pode procurar bibliotecas divisórias de grafema em seu ambiente de software preferido.
Os recursos do serviço de idioma também retornam esses elementos textuais, por conveniência.
Os pontos de extremidade que retornam um deslocamento darão suporte ao 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 de caracteres solicitado. Atualmente, suportamos três tipos:
textElement_v8
(padrão): itera sobre grafemas conforme definido pelo padrão Unicode 8.0.0unicodeCodePoint
: itera sobre Unicode Code Points, o esquema padrão para Python 3utf16CodeUnit
: itera sobre unidades de código UTF-16, o esquema padrão para JavaScript, Java e .NET
Se o solicitado corresponder ao ambiente de programação escolhido, a stringIndexType
extração de substring pode ser feita usando métodos padrão de substring ou slice.