Suporte multilíngue e emoji em Recursos de serviço de linguagem

O suporte multilíngue e de emoji causou codificações Unicode que usam mais de um ponto de código para representar um só caractere exibido, chamado de grafema. Por exemplo, emojis como 🌷 e 👍 podem usar vários caracteres para compor a forma com caracteres adicionais de atributos visuais, como tom de pele. Da mesma forma, a palavra híndi अनुच्छेद é codificada como cinco letras e três marcas de combinação.

Devido aos diferentes comprimentos de possíveis codificações multilíngues e de emoji, os Recursos do serviço de idioma podem retornar deslocamentos na resposta.

Deslocamentos na resposta da API

Sempre que os houver deslocamentos retornados na resposta da API, lembre-se:

  • Os elementos na resposta podem ser específicos do ponto de extremidade que foi chamado.
  • Os conteúdos HTTP POST/GET são codificados em UTF-8, que pode ou não ser a codificação de caractere padrão no compilador ou no sistema operacional do lado do cliente.
  • Deslocamentos referem-se a contagens de grafemas com base no padrão Unicode 8.0.0, não nas contagens de caracteres.

Como extrair substrings de texto com deslocamentos

Os deslocamentos podem causar problemas ao usar métodos de substring baseados em caractere, como o método substring() do .NET. 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 e não no final.

No .NET, considere o uso da classe StringInfo, que permite trabalhar com uma cadeia de caracteres como uma série de elementos textuais, em vez de objetos de caractere individuais. Você também pode procurar bibliotecas divisor de grafemas no ambiente de software da sua preferência.

Os Recursos do serviço de linguagem também retornam esses elementos textuais, para sua conveniência.

Os pontos de extremidade que retornam um deslocamento darão suporte ao parâmetro stringIndexType. Esse parâmetro ajusta os atributos offset e length na saída da API para corresponder ao esquema de iteração de cadeia de caracteres solicitado. No momento, há suporte para três tipos:

Se o stringIndexType solicitado corresponder ao ambiente de programação da sua escolha, a extração de substring poderá ser feita usando os métodos padrão de substring ou de fatia.

Confira também