Podpora více jazyků a emoji ve funkcích služby Language
Podpora více jazyků a emoji vedla k kódování Unicode, která používají více než jeden bod kódu k reprezentaci jednoho zobrazeného znaku označovaného jako grapheme. Například emoji mají rády 🌷 a 👍 můžou použít několik znaků k vytvoření obrazce s dalšími znaky pro vizuální atributy, jako je například tón pleti. Podobně je hindština zakódovaná अनुच्छेद
jako pět písmen a tři kombinační značky.
Vzhledem k různým délkám možných vícejazyčných kódování a kódování emoji mohou funkce služby Language vracet posuny v odpovědi.
Posuny v odpovědi rozhraní API
Vždy, když se vrátí posuny odpovědi rozhraní API, mějte na paměti:
- Prvky v odpovědi můžou být specifické pro volaný koncový bod.
- Datové části HTTP POST/GET jsou kódované ve formátu UTF-8, což může, ale nemusí být výchozí kódování znaků v kompilátoru nebo operačním systému na straně klienta.
- Posuny odkazují na počty grafů založené na standardu Unicode 8.0.0 , nikoli na počty znaků.
Extrahování podřetěžců z textu s odsazením
Posuny mohou způsobit problémy při použití metod podřetězení založených na znacích, například metody .NET substring(). Jedním z problémů je, že posun může způsobit, že metoda podřetězení skončí uprostřed víceznakového kódování grapheme místo konce.
V rozhraní .NET zvažte použití třídy StringInfo , která umožňuje pracovat s řetězcem jako řadou textových prvků, nikoli s jednotlivými objekty znaků. Můžete také vyhledat knihovny grafeme splitter ve vašem upřednostňovaném softwarovém prostředí.
Funkce služby Language pro usnadnění také vrací tyto textové prvky.
Koncové body, které vrátí posun, parametr podporují stringIndexType
. Tento parametr upraví offset
atributy a length
ve výstupu rozhraní API tak, aby odpovídaly požadovanému schématu iterace řetězců. V současné době podporujeme tři typy:
textElement_v8
(výchozí): iteruje přes grafy definované standardem Unicode 8.0.0.unicodeCodePoint
: iteruje body kódu Unicode, výchozí schéma pro Python 3utf16CodeUnit
: iteruje v jednotkách kódu UTF-16, což je výchozí schéma pro JavaScript, Javu a .NET.
stringIndexType
Pokud požadovaný řetězec odpovídá programovacímu prostředí podle výběru, je možné extrakci podřetěců provést pomocí standardních metod podřetěžce nebo řezu.