Alamofire字符串参数硬编码工作但传递为字符串参数不

时间:2018-03-23 13:34:02

标签: json swift string alamofire

我正在尝试进行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]!)
        }
    }
}

但结果相同。

3 个答案:

答案 0 :(得分:0)

  1. 如果您确定这个Unicode问题,那么您可以使用编码器和解码器功能来处理这个问题。

  2. 或者如果您知道您的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