gpt4 book ai didi

ios - 与包含它们的字符集相比,只有 2 个表情符号返回不正确的长度

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:08 24 4
gpt4 key购买 nike

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 String 或 Range 具有完全相同的行为。

当我将 myString 设置为大多数面部表情符号时,范围返回为长度为 2,并且子字符串可以在其他地方适当使用。只有 2 个面部表情符号——“smiling face”表情符号和“frowning face”表情符号,范围返回为 1 的长度。在所有情况下,字符串的长度返回为 2。具有给定的子字符串1 的范围不完整,您可以看到将其与 myString 进行比较,作为将其与自身进行比较的示例,结果为 false。这 2 个表情符号的范围结果应该是 2。

有趣的是,看看 unicode 规范,这 2 个表情符号的 unicode 值与其邻居的值大不相同。

这似乎是一个 iOS 错误。我想不出我个人会在这里做错什么,因为它适用于所有其他表情符号。

最佳答案

几乎没有答案,但很多东西都适合评论所以请耐心等待 :)

我不知道您是否已经看过这个,但我认为您的问题已在 WWDC 2017 的平台联盟演讲 (https://developer.apple.com/videos/play/wwdc2017/102/) 中关于 Swift 4 中的新功能的部分得到解决。

如果您在大约 23 分 12 秒处观看视频,您会看到 Ted Kremenek 谈论他们如何使用 Unicode 9 Grapheme Braking 解决分离 Unicode 字符的问题,正如 Swift 4 中预期的那样。

另外,看看 this question and answer .

是的......不要详细问我这一切意味着什么,但他们似乎正在研究它:)

关于ios - 与包含它们的字符集相比,只有 2 个表情符号返回不正确的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44386938/

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