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:
textElement_v8
(impostazione predefinita): itera sui grafemi come definito dallo standard Unicode 8.0.0unicodeCodePoint
: itera sui punti di codice Unicode, lo schema predefinito per Python 3utf16CodeUnit
: itera su unità di codice UTF-16, lo schema predefinito per JavaScript, Java e .NET
Se l'oggetto stringIndexType
richiesto corrisponde all'ambiente di programmazione preferito, è possibile eseguire l'estrazione delle substring usando metodi standard di sottostringa o sezione.