Core data UTF16存储字符串不';一旦从CoreData检索回,则不匹配
因此,我使用在CoreData中保存一个字符串Core data UTF16存储字符串不';一旦从CoreData检索回,则不匹配,core-data,utf-8,utf-16,corestore,Core Data,Utf 8,Utf 16,Corestore,因此,我使用在CoreData中保存一个字符串标识符。 该字符串可能包含一些瑞典语UTF16字符。从调试器控制台检查: > po identifier "/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder åäö/Test with Swedish characters - åäö.xlsx" 保存回CoreData后立即: >po record <File: 0x281e140a0> (entity: File; id:
标识符
。
该字符串可能包含一些瑞典语UTF16字符。从调试器控制台检查:
> po identifier
"/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder åäö/Test with Swedish characters - åäö.xlsx"
保存回CoreData后立即:
>po record
<File: 0x281e140a0> (entity: File; id: 0xdcac6620f1e9eb63 <x-coredata://BA0168AF-92CE-4AC2-A934-1020E41C5C20/File/p615>; data: {
// ...
identifier = "filecloud.test@run.se@files.runcloud.se/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder \U00e5\U00e4\U00f6/Test with Swedish characters - \U00e5\U00e4\U00f6.xlsx";
// ...
})
当尝试使用UTF16瑞典语标识符
字符串再次检索记录时,问题会在稍后出现,因为它不再匹配
CoreStore.fetchOne(From<Record>().where(\.identifier == identifier)) // Fails
和identifer
与此硬编码字符串不匹配:
po identifier == "filecloud.test@run.se@files.runcloud.se/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder åäö/Test with Swedish characters - åäö.xlsx"
true
但是使用标识符
而不是硬编码的标识符则不行
更新2
比较标识符
的.unicodeScalars
和硬编码字符串确实表明它们确实不同:
CoreData保存和返回的字符串完全相同
使用复杂字符检索值的问题是,CordaDa(最有可能的SQLite后面)不认为我的句子是相等的,因为它们有不同。两个句子都是有效的,在Swift中比较相等,但在CoreData中不相等,作为检索对象的值
在Swift中,似乎没有一种正确的方法来转换grapheme群集,因此我的解决方法是重新创建一个过程,首先创建原始grapheme群集。这涉及到首先从字符串中创建一个URL
,然后让FileProvider
框架通过调用persistentiIdentifierForItem(at:URL)!,创建相同的图形集集群!。原始值
。然后使用此值检索保存的对象
CoreStore.fetchOne(From<Record>().where(\.identifier == "filecloud.test@run.se@files.runcloud.se/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder åäö/Test with Swedish characters - åäö.xlsx")) // Works
po identifier == "filecloud.test@run.se@files.runcloud.se/EXTERNAL/Gemensam RUN/FileCloud Test/Test folder åäö/Test with Swedish characters - åäö.xlsx"
true