【发布时间】:2013-10-14 04:15:22
【问题描述】:
我们的目标是为 SQLite 数据库编写不区分大小写的排序规则。我们为多个平台执行此操作,但 iOS 似乎存在一致的问题,这些问题(偶尔)表现在损坏的数据库索引中。经过长时间的实验,我们断定罪魁祸首是CFStringCompare()函数,它违反了理论规则。
累加。从理论上讲,比较函数必须是自反的、对称的和传递的。
我们所做的是生成随机字符串并测试 CFStringCompare() 是否满足上述属性。
这是一个示例问题: CFStringCompare 与标志 NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch 产生:
"Я7;1FC9" > "SДA`\"0l"
"SДA`\"0l" > "Я7;1FC9"
换句话说,A>B 同时 B>A!
我们测试了更多的标志组合:
- kCFCompareNonliteral 显示类似问题
- kCFCompareLocalized 被证明是最糟糕的选择(大多数问题)
有人知道在 iOS 下实现不区分大小写比较的安全方法吗?
【问题讨论】: