Supporto multilingue ed emoji nelle funzionalità del Servizio di linguaggio

Il supporto multilingue ed emoji ha portato a codifiche Unicode che usano più di un punto di codice per rappresentare un singolo carattere visualizzato, denominato grafema. Ad esempio, emoji come🌷 e 👍 possono utilizzare vari caratteri per comporre la forma, con caratteri aggiuntivi per attributi visivi, ad esempio la tonalità della pelle. Analogamente, la parola hindi अनुच्छेद è codificata come cinque lettere e tre segni di combinazione.

A causa delle diverse lunghezze di possibili codifiche multilingue ed emoji, le funzionalità del Servizio di linguaggio possono restituire offset nella risposta.

Offset nella risposta dell'API

Quando vengono restituiti offset alla risposta API, ricordare quanto segue:

  • Gli elementi nella risposta possono essere specifici dell'endpoint chiamato.
  • I payload HTTP POST/GET vengono codificati in UTF-8, che può essere o meno la codifica dei caratteri predefinita nel compilatore o nel sistema operativo sul lato client.
  • Gli offset fanno riferimento ai conteggi dei grafemi in base allo standard Unicode 8.0.0, non ai conteggi dei caratteri.

Estrazione di sottostringhe dal testo con offset

Gli offset possono causare problemi quando si usano metodi di sottostringa basati su caratteri, ad esempio il metodo substring() .NET. Un problema è che un offset può causare la fine di un metodo di substring al centro di una codifica di un grafema multi-caratteri, anziché alla fine.

In .NET è consigliabile usare la classe StringInfo, che consente di usare una stringa come una serie di elementi testuali, anziché singoli oggetti carattere. È anche possibile cercare librerie di splitter di grafemi nell'ambiente software preferito.

Le funzionalità del Servizio di linguaggio restituiscono anche questi elementi testuali, per praticità.

Gli endpoint che restituiscono un offset supporteranno il parametro stringIndexType. Questo parametro regola gli attributi offset e length nell'output dell'API in modo che corrispondano allo schema di iterazione stringa richiesto. Attualmente sono supportati tre tipi:

Se l'oggetto stringIndexType richiesto corrisponde all'ambiente di programmazione preferito, è possibile eseguire l'estrazione delle substring usando metodi standard di sottostringa o sezione.

Vedi anche