在我的 iPhone 应用程序(在 SWIFT 中开发)中,我必须与 https 服务(带有参数)进行通信,并且需要分析响应。
一切正常,但在某些情况下注意到它没有得到预期的结果...进一步分析我发现这是将服务器响应数据转换为字符串的问题(NSData -> NSString)...
1)。当我使用UTF8编码我得到 nil 作为转换后的字符串(responseString)
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
2)。但与ASCII编码没问题(获取服务器提供的正确响应)
let responseString = NSString(data: data, encoding: NSASCIIStringEncoding)
以下是我正在尝试的完整示例代码...
let myUrl = NSURL(string: "https://myurl.com/myservice.asp")
let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
request.timeoutInterval = 55.0
let postString = "paramone=\(para1)¶mtwo=\(para2)¶mthree=\(para3)"
// NOTE: Works ok with ASCII AND UTF8 both encoding types at this point...
// request.HTTPBody = postString.dataUsingEncoding(NSASCIIStringEncoding)
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
if (error != nil)
{
println("Error: \(error)")
println("Description: \(error.description)")
println("Domain : \(error.domain)")
println("Error code : \(error.code)")
}
else
{
//???? => ENCODING PROBLEM
// let responseString = NSString(data: data, encoding: NSASCIIStringEncoding)
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Response: \(responseString)")
}
}
task.resume()
我遇到了其他几个POSTS解释同样的问题...但不确定使用 ASCII 而不是 UTF8 是否更好...
另外,我无法理解包含“£”符号的响应,并且可以使用 ASCII 编码正常工作(尽管“£”不在 ASCII 字符集中),但不能使用 UTF8。
想听听我是否遗漏了什么,或者最好的方法是什么……谢谢。