Stöd för flerspråkiga och emojis i språktjänstfunktioner
Stöd för flerspråkiga och emojier har lett till Unicode-kodningar som använder mer än en kodpunkt för att representera ett enda tecken som visas, som kallas grapheme. Till exempel kan emojis som 🌷 och 👍 använda flera tecken för att skriva formen med ytterligare tecken för visuella attribut, till exempel hudton. På samma sätt kodas hindi-ordet अनुच्छेद
som fem bokstäver och tre kombinationstecken.
På grund av de olika längderna för möjliga flerspråkiga kodningar och emojikodningar kan språktjänstfunktioner returnera förskjutningar i svaret.
Förskjutningar i API-svaret
Kom ihåg följande när förskjutningar returneras i API-svaret:
- Element i svaret kan vara specifika för slutpunkten som anropades.
- HTTP POST/GET-nyttolaster kodas i UTF-8, vilket kan vara standardteckenkodningen på kompilatorn eller operativsystemet på klientsidan.
- Förskjutningar refererar till grapheme-antal baserat på Unicode 8.0.0-standarden , inte teckenantal.
Extrahera delsträngar från text med förskjutningar
Förskjutningar kan orsaka problem när du använder teckenbaserade understrängsmetoder, till exempel metoden .NET substring(). Ett problem är att en förskjutning kan leda till att en delsträngsmetod slutar mitt i en grapheme-kodning med flera tecken i stället för slutet.
I .NET bör du överväga att använda klassen StringInfo , som gör att du kan arbeta med en sträng som en serie textelement i stället för enskilda teckenobjekt. Du kan också leta efter grapheme splitter-bibliotek i önskad programvarumiljö.
Språktjänstfunktionerna returnerar även dessa textelement för enkelhetens skull.
Slutpunkter som returnerar en förskjutning stöder parametern stringIndexType
. Den här parametern justerar attributen offset
och length
i API-utdata så att de matchar det begärda sträng-iterationsschemat. För närvarande stöder vi tre typer:
textElement_v8
(standard): itererar över grafer enligt definitionen i Unicode 8.0.0-standardenunicodeCodePoint
: itererar över Unicode Code Points, standardschemat för Python 3utf16CodeUnit
: itererar över UTF-16 Code Units, standardschemat för JavaScript, Java och .NET
Om den stringIndexType
begärda matchar den programmeringsmiljö som du väljer kan extrahering av delsträngar göras med hjälp av standardmetoder för delsträngar eller sektorer.