gpt4 book ai didi

objective-c - 保存在核心数据中后字符串长度发生变化

转载 作者:太空狗 更新时间:2023-10-30 03:53:18 24 4
gpt4 key购买 nike

那么问题来了。

我有一个字符串

    Белый Клык-0.fb2

NSString方法长度返回16

在 Core Data 中保存字符串后(后端 - sqlite)

NSString 方法长度返回 17,但视觉上字符串保持不变

    Белый Клык-0.fb2

显然方法 isEqualToString: 返回 NO

经过大量实验,我发现问题出在这封信上:

    й

删除这封信解决问题。

但这让我发疯,为什么会发生这样的事情?

这里的解决方法有效,但不满足我:

  1. stringByReplacingPercentEscapesUsingEncoding:- 需要在数据库查询中和之后立即转换字符串
  2. 音译整个字符串 - 有点黑客

这里的解决方法不起作用:

  1. stringWithUTF8String
  2. Converting escaped UTF8 characters back to their original form

请帮助我了解保存在 Core Data 中后字符串发生了什么。

还有比我更优雅的解决方案吗?

最佳答案

该问题可能与 unicode normalization 有关.所以 Coredata 似乎存储分解的字符串(所以 © 计数为 2 - 一个用于字母,一个用于重音),这就是你得到长度差异的原因。如果您尝试在将原始字符串与 Coredata 返回的内容进行比较之前对其进行分解,它应该可以工作:

[yourOriginalString decomposedStringWithCanonicalMapping]

现在,这背后的原因超出了我的专业领域。我经常使用 coredata 来管理我的模型,并且多次使用希腊语/俄语字符串,但从未遇到过这样的问题。如果有人可以对此进行扩展并阐明一些信息,我也会对这个主题非常感兴趣。

关于objective-c - 保存在核心数据中后字符串长度发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15063013/

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