如何为Alamofire POST请求体设置UTF8编码?

Man*_*nis 1 encoding utf-8 ios alamofire

我想将UTF8编码的JSON主体发送到我的REST API.我的代码现在是

var body : [String:Any]? = ["version":Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""];
.
.
body?["type"] = type
var url : String = UserDefaults.standard.value(forKey:"url") as! String
url.append("MobileLogin")
Alamofire.request(url, method: .post, parameters:body, encoding: JSONEncoding.default, headers: nil).responseJSON { (responseData) in
    if((responseData.result.value) != nil) {
    .
    .
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是JSON发送的不是UTF8编码的.想知道如何在Alamofire请求中设置类似"JSONEncoding.encode("UTF8")的内容吗?

Moh*_*lmy 5

试试这个

let options = NSJSONWritingOptions()
    let data = try NSJSONSerialization.dataWithJSONObject(parameters!, options: options)

    mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
    mutableURLRequest.HTTPBody = data
Run Code Online (Sandbox Code Playgroud)

或其他方式

extension String: ParameterEncoding {

    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try urlRequest.asURLRequest()
        request.httpBody = data(using: .utf8, allowLossyConversion: false)
        return request
    }

}

Alamofire.request(url, method: .post, parameters: [:], encoding: "myBody", headers: [:])
Run Code Online (Sandbox Code Playgroud)