【发布时间】:2014-02-28 03:23:46
【问题描述】:
我在编写的应用程序中遇到问题,我需要比较一个指向文件的 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,它看起来是一样的,但它们不能比较。
如果我对 NSString 运行 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding,我会得到 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.pdf
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.pdf
NSLog(@"Precompose file 1: %@", [filePath precomposedStringWithCanonicalMapping]);
第二次。
尝试了相同的代码,但使用 precomposedStringWithCompatibilityMapping 并得到完全相同的结果:(
【问题讨论】:
-
代码中的 URL 是否有 file:// 作为前缀?如果是,它们将不一样。
-
谢谢,但我也尝试将 file:// 前缀添加到 NSString 并进行比较,还从 URL 中删除了 file:// ——但仍然无法比较它们:(
-
您如何比较它们,您可以发布代码吗?
-
我尝试了很多比较方法,但似乎字符串不匹配:
[filePath isEqualToString:[document.fileURL absolutePath]]
标签: ios objective-c nsstring nsurl