【发布时间】:2015-09-21 11:53:24
【问题描述】:
在我的 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。
想知道我是否遗漏了任何东西,或者最好的方法是什么...谢谢。
【问题讨论】:
标签: ios objective-c swift