通过NSURLSession发送表情符号崩溃

时间:2016-07-18 03:19:08

标签: ios swift http nsurl emoji

我正努力在我的一个Swift项目中压制一些恼人的错误。我想知道是否有办法通过HTTP传输表情符号,这样我的服务器端代码就可以保存表情符号数据供以后检索。问题是,当请求被制定时,应用程序将在创建NSURL / NSURLSession(不确定哪一个)时是否会崩溃,如果它包含表情符号。

有什么方法可以让我的应用程序在插入表情符号时不会崩溃,还是有专门的方式我可以在HTTP请求中使用Emojis?

Alamofire.request(.POST, "removed/api.php?request=setBio&identification=" + identification + "&bio=" + content).responseJSON { response in
        if let jsonStr = response.result.value {
            let jsonObj = JSON(jsonStr)
            print ("response for bio update: \(jsonObj["response"])")
            self.user.bio = self.bioField.text!
        }
    }

如果"内容"字符串包含一个表情符号,它会崩溃。 Alamofire通过NSUrlSession运行一切。

Alamofire发生了崩溃(显然它在解开一个可选值时发现为零,不知道为什么。文字不是。)

let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URLString.URLString)!)

2 个答案:

答案 0 :(得分:1)

找到一个非常简单的解决方案!

只需将其添加到内容变量:

.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLPathAllowedCharacterSet())!

并且您将能够发送带有表情符号的请求。

答案 1 :(得分:1)

你应该让Alamofire做出必要的百分比逃避请求:

let parameters = ["request": "setBio", "identification": identification, "bio": content]

Alamofire.request(.POST, "removed/api.php", parameters: parameters, encoding: .URLEncodedInURL)
    .responseJSON { response in
        if let jsonStr = response.result.value {
            // ...
        }
    }

坦率地说,我上面使用了ParameterEncoding.URLEncodedInURL,因为在原始示例中,您将这些参数放在URL中。但是,通常会在POST个请求中将这些参数包含在请求正文中,通过省略encoding参数来实现,或者通过使用{{1}来解决一些令人困惑/矛盾的问题。 } encoding。在请求正文中包含参数更为习惯,更安全。但是,如果确实必须在网址中包含这些参数,请为ParameterEncoding.URL提供.URLEncodedInURL值。

但关键信息是Alamofire已经知道如何正确地百分比转义参数,所以让它这样做,而不是自己手动构建URL或encoding。并且,作为警告,其他技术(例如NSURLRequest(包括stringByAddingPercentEncodingWithAllowedCharacters)或URLPathAllowedCharacterSet等字符集不仅不那么直接,而且还无法正确地逃脱某些请求(尽管他们使用表情符号)。无论如何,让Alamofire处理这个问题会更好,因为它可以正确地逃脱。