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 till UTF-8, vilket kanske eller kanske inte är standardteckenkodningen i kompilatorn eller operativsystemet på klientsidan.
- Förskjutningar refererar till antalet grafem baserat på standarden Unicode 8.0.0, inte teckenantal.
Extrahera delsträngar från text med offsetar
Förskjutningar kan orsaka problem vid användning av teckenbaserade substringsmetoder, till exempel .NET-metoden 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-standarden -
unicodeCodePoint
: itererar över Unicode Code Points, standardschemat för Python 3 -
utf16CodeUnit
: itererar över UTF-16 Code Units, standardschemat för JavaScript, Java och .NET
Om den begärda stringIndexType
matchar den programmeringsmiljö du väljer, kan extrahering av delsträngar göras med hjälp av standardmetoder för delsträngar eller slice-metoder.