JSON字符串中的特殊字符 - 结果为&#34; <null>&#34;

时间:2016-04-26 14:57:11

标签: json swift character-encoding

当结果内容包含重音字符(例如ñé)时,我无法使用API​​调用的结果。

以下是我使用的代码:

let url = "http://example.com/fetchdata.php"
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
request.addValue("gzip", forHTTPHeaderField: "Accept-Encoding")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPMethod = "POST"
let params = ["country":selectedCountry] as Dictionary<String, AnyObject>
request.HTTPBody = try? NSJSONSerialization.dataWithJSONObject(params, options: [])

let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
    if let d = data {
        let json = try? NSJSONSerialization.JSONObjectWithData(d, options: .AllowFragments) as! [Dictionary<String, String>]
        // do some work on the resulting json object
        // This is where the trouble starts!
    }
})

如果结果只包含普通的非重音字符,则一切正常,否则将json对象强制转换为[Dictionary<String, String>]会失败。如果我跑

print(try? NSJSONSerialization.JSONObjectWithData(d, options: .AllowFragments))

它将数组中的违规字段显示为"<null>"

我甚至没有将我从服务器获得的数据转换为String,因此我不确定在哪里可以强制它使用UTF8编码,如果它&#39 ;现在不这样做。我该如何解决?

修改 实际上,这结果是一个服务器问题。在php脚本中指定charset就可以了:

$db->set_charset("utf8");

奇怪的是,当数据使用一组相同配置的自定义php脚本进出数据库时,这不是必需的,但是一旦使用phpMyAdmin的导入功能添加数据就会破坏。

0 个答案:

没有答案