gpt4 book ai didi

iOS正确比较文件路径

转载 作者:行者123 更新时间:2023-11-29 10:48:20 29 4
gpt4 key购买 nike

我在编写的应用程序中遇到问题,我需要比较一个指向文件的 NSURL 和一个 NSString,后者是相同文件路径的传入字符串表示形式。

我无法让他们进行比较——NSLogging 时我得到的输出令人困惑,也许是编码问题?

我可以使用以下代码使它们看起来相同:[urlString stringByRemovingPercentEncoding];

NSURL 的原始输出是:file:///var/mobile/Applications/F14AFBD8-FF60-4094-8BBD-7AC2477E0B20/Documents/1.%20AKTIV%20SA%CC%88LJFOLDER/Sa%CC%88ljfolder2014-SP1.pdf

对于 NSString:/var/mobile/Applications/F14AFBD8-FF60-4094-8BBD-7AC2477E0B20/Documents/1。 AKTIV SÄLJFOLDER/Säljfolder2014-SP1.pdf

如果我在 NSURL 上运行 stringByRemovingPercentEncoding,它看起来是一样的,但它们无法比较。

如果我运行 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 到 NSString 我得到 file:///var/mobile/Applications/F14AFBD8-FF60-4094-8BBD-7AC2477E0B20/Documents/neSTLe/1 .%20AKTIV%20S%C3%84LJFOLDER/S%C3%A4ljfolder2014-SP1.pdf

请注意,网址上的百分比不同。我已经尝试了很多东西,更改编码等,但找不到解决这个问题的方法。


编辑

因此,我尝试了 precomposedStringWithCanonicalMapping,如下所示:NSLog(@"EQUAL? :%hhd", [[strippedUrlString precomposedStringWithCanonicalMapping] isEqualToString:[filePath precomposedStringWithCanonicalMapping]]); – 返回 0

我记录了字符串并得到了

/Users/xxxxxx/Library/Application Support/iPhone Simulator/7.0/Applications/C05E0885-7B58-4B2F-A6B4-D9388E60462C/Documents/1。 AKTIV SÄLJFOLDER/Säljfolder2014-SP1.pdfwith NSLog(@"Precompose url 1: %@", [strippedUrlString precomposedStringWithCanonicalMapping]);

对于第一个字符串和

/Users/xxxxxx/Library/Application%20Support/iPhone%20Simulator/7.0/Applications/C05E0885-7B58-4B2F-A6B4-D9388E60462C/Documents/1.%20AKTIV%20SA%CC%88LJFOLDER/Sa% CC%88ljfolder2014-SP1.pdfwith NSLog(@"Precompose file 1: %@", [filePath precomposedStringWithCanonicalMapping]);

第二次。

尝试了相同的代码,但使用了 precomposedStringWithCompatibilityMapping 并得到了完全相同的结果 :(

最佳答案

可能您遇到了一个问题,即在 Unicode 中等效字符串并不总是二进制相等。

http://en.wikipedia.org/wiki/Unicode_equivalence

你有

  1. …SA%CC%88…:这就是问题。这意味着:我们有一个“A”和一个组合分音符 -> Ä。分音符是 0xCC88,它是 Unicode 0x0308 的 UTF-8(组合分音符)。因此,Ä 被编码为带有组合分音符的 A。

  2. …S%C3%84…:这很容易。 0xC384 是 0x00C4 的 UTF-8,这意味着 A-Umlaut -> Ä

首先:第一个字符串的来源是什么?

补充:您可以使用precomposedStringWith…Mapping (NSString)。

顺便说一句:您可以使用 -compare:withOptions: 等比较没有变音符号的字符串。使用选项 NSDiacriticInsensitiveSearch。在这种情况下,我假设字符串 1 等于字符串 2。但是它也等于“A”,这可能不是您想要的。

关于iOS正确比较文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21547729/

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