只有 2 个表情符号 return 与包含它们的字符集相比长度不正确
Only 2 emoji return an incorrect length when compared against a character set containing them
let myString = "☺️"
let emoji = "☺️☹️"
let characterSet = CharacterSet(charactersIn: emoji)
let range = (myString as NSString).rangeOfCharacter(from: characterSet)
(myString as NSString).substring(with: range)
(range as NSRange).location
(range as NSRange).length
(myString as NSString).length
substring == myString
此代码可以在 Playgrounds 中 运行。尝试将 myString 更改为任何表情符号。
我在这里使用 NSString 和 NSRange,因为它们的值更容易展示,但这与 Swift 字符串或范围具有完全相同的行为。
当我将 myString 设置为大多数面部表情符号时,运行ge 返回为长度为 2,并且子字符串可以在其他地方适当使用。只有 2 个面部表情符号 - “smiling face" emoji and "frowning face”表情符号,运行ge 返回长度为 1。在所有情况下,字符串的长度返回为 2。具有给定的子字符串运行ge of 1 是不完整的,你可以看到将其返回到 myString 进行比较,例如将其与自身进行比较,结果为 false。这 2 个表情符号的 运行ge 结果应该是 2.
有趣的是,看看 unicode 规范,这 2 个表情符号的 unicode 值与其邻居的 unicode 值大不相同。
这似乎是一个 iOS 错误。我想不出我个人在这里做错了什么,因为它适用于所有其他表情符号。
很难回答,但有很多内容适合评论,所以请耐心等待 :)
我不知道您是否已经看过这个,但我认为您的问题已在 WWDC 2017 (https://developer.apple.com/videos/play/wwdc2017/102/) 的平台联盟演讲中解决Swift 4.
如果您在大约 23 分 12 秒处观看视频,您会看到 Ted Kremenek 谈论他们如何使用 Unicode 9 Grapheme Braking 解决 Swift 4 中预期的分隔 unicode 字符的问题.
另外,看看 。
是的......不要详细问我这一切意味着什么,但他们似乎正在努力:)
let myString = "☺️"
let emoji = "☺️☹️"
let characterSet = CharacterSet(charactersIn: emoji)
let range = (myString as NSString).rangeOfCharacter(from: characterSet)
(myString as NSString).substring(with: range)
(range as NSRange).location
(range as NSRange).length
(myString as NSString).length
substring == myString
此代码可以在 Playgrounds 中 运行。尝试将 myString 更改为任何表情符号。
我在这里使用 NSString 和 NSRange,因为它们的值更容易展示,但这与 Swift 字符串或范围具有完全相同的行为。
当我将 myString 设置为大多数面部表情符号时,运行ge 返回为长度为 2,并且子字符串可以在其他地方适当使用。只有 2 个面部表情符号 - “smiling face" emoji and "frowning face”表情符号,运行ge 返回长度为 1。在所有情况下,字符串的长度返回为 2。具有给定的子字符串运行ge of 1 是不完整的,你可以看到将其返回到 myString 进行比较,例如将其与自身进行比较,结果为 false。这 2 个表情符号的 运行ge 结果应该是 2.
有趣的是,看看 unicode 规范,这 2 个表情符号的 unicode 值与其邻居的 unicode 值大不相同。
这似乎是一个 iOS 错误。我想不出我个人在这里做错了什么,因为它适用于所有其他表情符号。
很难回答,但有很多内容适合评论,所以请耐心等待 :)
我不知道您是否已经看过这个,但我认为您的问题已在 WWDC 2017 (https://developer.apple.com/videos/play/wwdc2017/102/) 的平台联盟演讲中解决Swift 4.
如果您在大约 23 分 12 秒处观看视频,您会看到 Ted Kremenek 谈论他们如何使用 Unicode 9 Grapheme Braking 解决 Swift 4 中预期的分隔 unicode 字符的问题.
另外,看看
是的......不要详细问我这一切意味着什么,但他们似乎正在努力:)