保存在Core Data中后字符串长度更改

时间:2013-02-25 08:41:02

标签: objective-c core-data nsstring nsstringencoding

所以这是一个问题。

我有一个字符串

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

NSString方法长度返回16

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

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

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

显然方法isEqualToString:return NO

在实验中花了很多时间之后,我很清楚这个问题是这封信:

    й

删除此信解决问题。

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

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

  1. stringByReplacingPercentEscapesUsingEncoding: - 需要在db查询中和之后转换字符串
  2. 音译整个字符串 - 有点黑客
  3. 这是dosnt工作的解决方法:

    1. stringWithUTF8String
    2. Converting escaped UTF8 characters back to their original form
    3. 请在Core Data中保存后帮助我理解字符串的运行情况。

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

1 个答案:

答案 0 :(得分:3)

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

[yourOriginalString decomposedStringWithCanonicalMapping]

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