【发布时间】:2017-04-06 11:53:40
【问题描述】:
我有编码字符串的 obj-C 方法:
- (NSString *) encodeValue:(NSString*) unescaped{
return [unescaped stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet URLHostAllowedCharacterSet]];
}
输入:testswiftapppod://
输出:testswiftapppod%3A%2F%2F
我在 Swift 中编写了相同的方法,但得到了不同的输出:testswiftapppod:%2F%2F
static func encodeValue(unescaped:String!) -> String{
return unescaped.addingPercentEncoding(
withAllowedCharacters: CharacterSet.urlHostAllowed)!
}
由于某种原因冒号未转换
如何解决这个问题?
我使用 Xcode 8.3
[编辑]
来自文档:
// 通过替换所有返回从接收器生成的新字符串 未使用百分比编码的 allowedCharacters 集中的字符 人物。 UTF-8 编码用于确定正确的百分比 编码的字符。不能对整个 URL 字符串进行百分比编码。这 方法旨在对 URL 组件或子组件进行百分比编码 字符串,而不是整个 URL 字符串。 allowedCharacters 中的任何字符 7 位 ASCII 范围之外的内容将被忽略。 - (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters NS_AVAILABLE(10_9, 7_0);
【问题讨论】:
-
奇怪的是,Objective-C 代码的行为方式不同,但是 URL 的主机部分允许使用冒号 ,例如
http://myhost.com:myport/path -
URL 编码中允许使用冒号。只是一个问题,您是否尝试过类似“unescaped.stringByAddingPercentEncodingForFormData()”之类的方法?
-
另外,“testswiftapppod://”看起来更像是一个 URL 方案,你为什么需要转义它呢?
-
@MartinR 因为我想把它作为 URL 的参数
标签: objective-c swift string encoding