【发布时间】:2013-02-10 08:42:54
【问题描述】:
所以这里有一个问题。
我有一个字符串
Белый Клык-0.fb2
NSString方法长度返回16
在核心数据中保存字符串后(后端-sqlite)
NSString 方法长度返回 17,但视觉上字符串保持不变
Белый Клык-0.fb2
显然方法 isEqualToString: return NO
经过大量的实验,我猜想问题出在这封信上:
й
删除此字母可解决问题。
但它一直让我发疯,为什么会发生这样的事情?
这里的解决方法可行,但不满足我:
- stringByReplacingPercentEscapesUsingEncoding: - 需要在数据库查询中和之后转换字符串
- 音译整个字符串 - 有点破解
这里是 dosnt 有效的解决方法:
- stringWithUTF8String
- Converting escaped UTF8 characters back to their original form
请帮助我了解在 Core Data 中保存后字符串发生了什么。
还有更优雅的解决方案吗?
【问题讨论】:
-
这可能是与unicode normalization 相关的问题。只需尝试将您的 coredata 字符串与
[yourOriginalString decomposedStringWithCanonicalMapping]进行比较,看看是否有效...(我已经对其进行了测试,当在您的示例中的字符串中调用时它返回的长度为 17) -
谢谢!可悲的是,这确实有效,但我什至没有听说过规范映射。你可以添加一个答案吗?我把它标记为正确答案。
-
如果您确实需要保留原始字符串,包括组合字符,您必须将其存储为 NSData:
[myString dataUsingEncoding:NSUTF16StringEncoding]
标签: objective-c core-data nsstring nsstringencoding