語言服務功能中的多語系和表情圖示支援
多語系和表情圖示支援會導致 Unicode 編碼使用一個以上的字碼元素來代表單一顯示的字元 (稱為語素簇)。 例如,類似 🌷 的表情圖示,👍 可能會使用數個字元和視覺屬性的其他字元 (例如膚色) 來撰寫圖形。 同樣地,印地文文字 अनुच्छेद
會編碼為五個字母和三個組合符號。
由於可能的多語系和表情圖示編碼長度不同,因此語言服務功能可能會在回應中傳回位移。
API 回應中的位移
當 API 回應傳回位移時,請記住:
- 回應中的元素可能特定於所呼叫的端點。
- HTTP POST/GET 承載是以 UTF-8 編碼,而這不一定是用戶端編譯器或作業系統上的預設字元編碼。
- 位移會根據 Unicode 8.0.0 標準 (而非字元計數) 參考語素簇計數。
從具有位移的文字中進行 substring 擷取
使用以字元為基礎的 substring 方法 (例如 .NET substring() 方法) 時,位移可能會造成問題。 其中一個問題是,位移可能會導致 substring 方法在多字元語素簇編碼的中間 (而非結尾) 結束。
在 .NET 中,請考慮使用 StringInfo 類別,此類別可讓您將字串作為一連串的文字元素,而不是個別的字元物件。 您也可以在慣用的軟體環境中尋找語素簇分隔器程式庫。
為了方便起見,語言服務功能也會傳回這些文字元素。
傳回位移的端點將支援 stringIndexType
參數。 此參數會調整 API 輸出中的 offset
和 length
屬性,以符合要求的字串逐一查看配置。 目前,我們支援三種類型:
textElement_v8
(預設):依照 Unicode 8.0.0 標準定義逐一查看語素簇unicodeCodePoint
:逐一查看 Unicode 字碼元素 (Python 3 的預設配置)utf16CodeUnit
:逐一查看 UTF-16 字碼元素 (JavaScript、JAVA 和 .NET 的預設配置)
如果 stringIndexType
要求項目符合選擇的程式設計環境,則可以使用標準的 substring 或配量方法來進行 substring 擷取。