次の方法で共有

语言功能中的多语言和表情符号支持

多语言和表情符号支持会导致 Unicode 编码使用多个代码点来表示单个显示字符,称为 grapheme。 例如,像🌷和👍这样的表情符号可能会使用多个字符来组成形状,并为视觉属性(如肤色)添加字符。 同样,印地语文字 अनुच्छेद 将编码为五个字母和三个组合标记。

由于可能的多语言编码和表情符号编码的长度不同,语言功能可能会在响应中返回偏移量。

API 响应中的偏移量

每当 API 响应中返回偏移量时,请记住:

  • 响应中的元素可能会特定于所调用的终结点。
  • HTTP POST/GET 有效负载以 UTF-8 格式编码,它不一定是客户端编译器或操作系统上的默认字符编码。
  • 偏移量是指基于 Unicode 8.0.0 标准的字素计数,而不是字符计数。

从具有偏移量的文本中提取子字符串

使用基于字符的子字符串方法(例如 .NET substring() 方法)时,偏移量可能会导致问题。 一个问题是,偏移量可能导致子字符串方法在多字符字形编码的中间而不是结尾处结束。

在 .NET 中,考虑使用 StringInfo 类,该类支持你将字符串处理为文本元素系列(而不是单个字符对象)。 还可以在首选软件环境中查找字素拆分器库。

为了方便起见,语言功能也会返回这些文本元素。

返回偏移量的终结点支持参数 stringIndexType 。 此参数可调整 API 输出中的 offsetlength 属性,以匹配请求的字符串迭代方案。 目前,我们支持三种类型:

  • textElement_v8 (默认值):遍历 graphemes,按照Unicode 8.0.0 标准定义
  • unicodeCodePoint:循环访问 Unicode 码位(Python 3 的默认方案)
  • utf16CodeUnit:循环访问 UTF-16 代码单位(JavaScript、Java 和 .NET 的默认方案)

如果请求的 stringIndexType 与所选的编程环境相匹配,则可以使用标准子字符串或切片方法提取子字符串。

另请参阅