含空格的字符串转换为NSURL返回nil的解决办法
SMB URL初始化NSURL返回nil的解决方法
问题场景
运行以下代码后,sharePath返回nil:
import UIKit let serverUrl = "smb://example.net/Data/OS/Home/test/untitled folder" let sharePath = NSURL(string: serverUrl)
原因分析
NSURL(string:)初始化器要求传入完全符合URL标准的编码字符串,原URL中的空格属于未编码的特殊字符,违反URL规范,导致初始化失败返回nil。
解决方法
方法1:手动替换特殊字符
直接将URL中的空格替换为URL编码后的%20:
import UIKit let serverUrl = "smb://example.net/Data/OS/Home/test/untitled%20folder" let sharePath = NSURL(string: serverUrl)
方法2:自动编码字符串
使用addingPercentEncoding(withAllowedCharacters:)方法对原字符串进行URL编码,推荐使用.urlPathAllowed字符集适配路径部分:
import UIKit let serverUrl = "smb://example.net/Data/OS/Home/test/untitled folder" if let encodedUrl = serverUrl.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) { let sharePath = NSURL(string: encodedUrl) // sharePath可正常初始化 }
方法3:使用URLComponents构建URL
通过URLComponents拆分URL各部分,它会自动处理特殊字符的编码,更适合复杂URL场景:
import UIKit var components = URLComponents() components.scheme = "smb" components.host = "example.net" components.path = "/Data/OS/Home/test/untitled folder" let sharePath = components.url // 等价于NSURL实例
内容的提问来源于stack exchange,提问作者AppleDeveloper
相关产品推荐
相关产品推荐

