gpt4 book ai didi

ios - 在UTF8中获取字符串的长度

转载 作者:行者123 更新时间:2023-11-28 08:05:50 25 4
gpt4 key购买 nike

如何获取 UTF-8 编码形式的字符串的长度(不是字节数)(等效于 PHP 的 mb_strlen(.., 'UTF-8'))?

我试过 string.characters.count 但它没有为表情符号等某些字符返回正确的长度。

例子:

let s = "✌🏿️"
print(s.characters.count) // prints 2, but should print 3.

最佳答案

您可以使用 .utf8 属性访问字符串的 UTF-8 编码。对其使用 count 以获取字符串中 UTF-8 代码单元的数量:

let string = "\u{1f603}" // One of the smiley face emojis...

print(string.utf8.count) // prints "4"

根据您编辑的问题,您可能正在寻找的是用于对字符串进行编码的 UnicodeScalar 的数量。您可以使用 unicodeScalars 属性访问它:

let s = "✌🏿️"
print(s.unicodeScalars.count) // prints 3

每个人都感到困惑的原因是因为您的原始问题要求以 UTF-8 编码形式提供字符串的长度。您真正想要的答案与 UTF-8 编码形式的字符串长度无关。

我认为您对 Unicode“扩展字素簇”、Unicode 代码点和可用于对 Unicode 代码点进行编码的各种编码(如 UTF-8)之间的区别感到困惑。

Swift 中的 Character 代表 Unicode 所说的“扩展字素簇”。也就是说,它是一个单一的视觉字符,即使它是由多个 Unicode 代码点组成。

Unicode 代码点是一个被赋予 32 位值的单一语言符号。两个或多个 Unicode 代码点可以组合起来创建一个 Character。在 Swift 中,Unicode 代码点由 UnicodeScalar 类型表示。

当需要存储字符串、通过 Internet 发送它或以其他方式将其转换为以字节表示的数据时,您必须决定如何对其进行编码。编码有很多种,最常见的可能是 UTF-8,它将字符串编码为一系列 UInt8 值。

这只是三个概念之间差异的一小部分。这实际上是一个非常有趣的主题,如果您用 Google 搜索其中的一些术语,您会发现更多有用的信息。

关于ios - 在UTF8中获取字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com