我正在尝试进行Alamofire服务调用以检索JSON中的项目列表。我遇到的问题是,无论何时我输入一个特殊字符:例如'它在某处将字符串解析为发送请求时的unicode字符串。当我输入o'sheas它回来时我正在寻找O \ U2019sheas
func sendGetRequest(passedInString: String) {
PARAMETERS["searchTxt"] = passedInString
Alamofire.request(URL, method: .get , parameters: PARAMETERS, headers: HEADER)
.validate(statusCode: 200..<400)
.responseJSON { response in
debugPrint(response.request!)
switch response.result {
// GETTING NO RESULTS BECAUSE THE REQUEST IS TURNING the o'sheas into O\U2019sheas
但奇怪的是,如果我只是替换它:
PARAMETERS["searchTxt"] = passedInString
使用硬编码字符串(我最初输入的字符串并且没有结果)
PARAMETERS["searchTxt"] = "o'sheas"
...它工作得很好,并没有将其转换为O \ U2019sheas。知道如何解决这个问题,更重要的是,为什么在作为String参数而不是硬编码字符串传入时会发生这种情况?
更新
我尝试添加URLEncoding.default作为编码参数,结果相同。
我也试过在searchTxt上创建一个Swift字符串扩展,将其作为参数传递,如下所示:
PARAMETERS["searchTxt"] = passedInString.escapeSpecialCharacters()
extension String {
mutating func escapeSpecialCharacters() {
// 1. Define replacements
let replacementCharacters = ["'" : "\'"]
// 2. Cycle through each replacement defined in the replacementCharacters array and remodify the string accordingly.
replacementCharacters.keys.forEach {
// 3. Replacing self with new modified string
self = self.replacingOccurrences(of: $0, with: replacementCharacters[$0]!)
}
}
}
但结果相同。
答案 0 :(得分:0)
如果您确定这个Unicode问题,那么您可以使用编码器和解码器功能来处理这个问题。
或者如果您知道您的String总是相同,那么使用Regex表达式追加'\'
答案 1 :(得分:0)
我认为问题在于“获取” - 因为它会使用URL中的字符串作为参数,“'”不能很好地使用。
尝试使用URLComponents
创建网址var urlComponents = URLComponents()
urlComponents.scheme = scheme
urlComponents.host = host
urlComponents.path = path
urlComponents.queryItems = [queryItem]
然后在
中使用urlComponents.url Alamofire.request(urlComponents.url, method: .get, headers: HEADERS)
{...}
URLQueryItem(name: "Param", value: "eter")
答案 2 :(得分:0)
尝试下面的代码行。可以帮到你。
originalString = "o'sheas"
var escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
PARAMETERS["searchTxt"] = escapedString