Alamofire 4和JSON中的特殊字符

Alamofire 4有特殊字符的问题。
JSON包含æ,ø和å,浏览器可以很好地显示它们,我之前使用SwiftyJSON的解决scheme也是如此。

Alamofire 4展示了这样的东西:

U00e6 

使用此调用:

 Alamofire.request(specificURL, method: .get, parameters: param, encoding: URLEncoding.default, headers: nil).responseJSON { (response: DataResponse<Any>) in print(response) } 

该怎么做才能解决这个问题?

编辑:

 Alamofire.request(url, method: .get, parameters: param, encoding: JSONEncoding.default) .responseJSON { response in switch response.result { case .success(let value) : print(response.request) // original URL request print(response.response) // HTTP URL response print(response.data) // server data print(response.result) // result of response serialization if let JSON = response.result.value as! [String:AnyObject]!{ print("JSON: ",JSON) self.arrUser = Mapper<Users>().mapArray(JSONArray:JSON["user"] as! [[String : Any]])! self.tableView.reloadData() } case .failure(let encodingError): //Print error } } 

我得到了在json响应中添加了æ的问题并尝试打印。

输出:

 JSON: Optional(<__NSArrayI 0x600000050320>( { "email_address" = "testwts06@gmail.com"; username = "testwts06 \U00e6"; }, { "email_address" = "testwts01@gmail.com"; username = "testwts01 \U00eb"; }, { "email_address" = "testwts100@gmail.com"; username = testwts100; }) 

显示时显示格式正确。

图片

Ekta的答案Swift 3更新:

 let encodedURL = specificURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) 

由于错误的JSON编码看起来典型的序列化错误,可能你的响应状态码是3840。

JSON文本应以UTF-8,UTF-16或UTF-32编码。

您可以尝试将响应数据转换为正确的UTF8编码:

 let datastring = NSString(data: response.data!, encoding: String.Encoding.isoLatin1.rawValue) let data = datastring!.data(using: String.Encoding.utf8.rawValue) do { let object = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) let jsonDic = object as! NSDictionary print(" ok, successfully converted..\(jsonDic)") } catch let aError as Error { // print and handle aError } 

希望它可以帮助你。

这是一个简单的String扩展,解决了这个问题:

 extension String { func fixUnicode() -> String { var copy = self as NSString let regex = try! NSRegularExpression(pattern: "\\\\U([A-Z0-9]{4})", options: .caseInsensitive) let matches = regex.matches(in: self, options: [], range: NSMakeRange(0, characters.count)).reversed() matches.forEach { let char = copy.substring(with: $0.rangeAt(1)) copy = copy.replacingCharacters(in: $0.range, with: String(UnicodeScalar(Int(char, radix: 16)!)!)) as NSString } return copy as String } }