使用 NSCharcterSet 进行 URL 编码
Posted
技术标签:
【中文标题】使用 NSCharcterSet 进行 URL 编码【英文标题】:URL Encoding with NSCharcterSet 【发布时间】:2018-09-25 11:39:53 【问题描述】:我的应用程序目录中存储的视频文件和图像文件很少。我正在使用 stringByAddingPercentEscapesUsingEncoding: 转换为合法的 URL 字符串。由于它已被弃用,我们将使用 stringByAddingPercentEncodingWithAllowedCharacters: 代替,我无法获得正确的 URL 来加载 pdf 或播放视频。我尝试了所有可用的 NSCharacterSet。它正在为空间添加额外的 %252020,这会造成问题。
使用 stringByAddingPercentEscapesUsingEncoding
file:///var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private%20Documents/Sample%20Image%20To%20Be%20Loaded.jpg
使用 ** stringByAddingPercentEncodingWithAllowedCharacters**
file:///var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private%2520Documents/Sample%2520Image%2520To%2520Be%2520Loaded.jpg
这找不到文件,因此无法加载它。非常感谢任何帮助。
【问题讨论】:
你以什么字符串开头? /var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private Documents/Sample Image To Be Loaded.jpg 一些网址有方括号,如 /var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private Documents/Sample Image To Be Loaded_[12345679].jpg 它将 %20 转换为 %2520 并将方括号 %5B 转换为 %255B 获得 %2520 的方式是当您的 url 中已经有 %20,然后再次进行 urlencoded,这会将 %20 转换为 %2520。 另一个例子 - /var/mobile/Containers/Data/Application/E1C0E3F8-673D-4360-A03B-2871CE4A25F0/Library/Private Documents/Summer Joy [06821124RWeXf].jpg 编码为 file:///var/mobile/Containers/Data/Application/E1C0E3F8-673D-4360-A03B-2871CE4A25F0/Library/Private%2520Documents/Summer%2520Joy%2520%255B06821124RWeXf%255D.jpg 我正在使用类似这样的代码 - NSURL *urlToLoad = [NSURL fileURLWithPath: [fullPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]]; 【参考方案1】:获得 %2520 的方式是当您的 url 中已经有 %20 时,然后再次进行 url 编码,这会将 %20 转换为 %2520。 %255B 是对方括号进行两次编码后得到的结果。
您可以在空项目中尝试以下代码:
NSString * str = @"/var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private Documents/Sample Image To Be Loaded.jpg";
NSString * encodedString = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
NSLog(@"encodedString = %@", encodedString);
NSString * encodedStringAgain = [encodedString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
NSLog(@"encodedStringAgain = %@", encodedStringAgain);
打印出来:
encodedString = /var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private%20Documents/Sample%20Image%20To%20Be%20Loaded.jpg
encodedStringAgain = /var/mobile/Containers/Data/Application/1392B0FE-F998-45A4-A398-A3ACB47ECE26/Library/Private%2520Documents/Sample%2520Image%2520To%2520Be%2520Loaded.jpg
在你的代码中你所要做的就是:
NSURL *urlToLoad = [NSURL fileURLWithPath: fullPath];
fullPath
是没有任何编码的原始字符串。
【讨论】:
【参考方案2】:你可以使用
NSString * encodedString = [@"stringURl to encode" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];
【讨论】:
没有帮助。我尝试了所有 NSCharacterset 选项。 :(以上是关于使用 NSCharcterSet 进行 URL 编码的主要内容,如果未能解决你的问题,请参考以下文章