带有重音符号/拉丁字符的JSON请求

时间:2015-07-21 22:01:32

标签: json swift swifty-json

我目前正在向网址提出请求。

其中一个团队的拉丁字符Ñ似乎使我的JSON为零,因此我导出数据的表中没有数据显示。我做了一些研究,我相信我需要将其编码为NSISOLatin1StringEncoding。

我正在使用SwiftyJSON来解析JSON。

let cuartoURL = NSURL(string: cuartoURLString)

    //initializes request
    let request = NSURLRequest(URL: cuartoURL!)
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue()) { response, jsonDataRequest4, error in
        if jsonDataRequest4 != nil {

        let dataRequest4 = jsonDataRequest4
        //println(NSString(data:dataRequest4, encoding: NSUTF8StringEncoding))

        //takes data, saves it as json
        let cuartoJSON = JSON(data: jsonDataRequest4)

        //checks to see that contents != nil, meaning the JSON file was found
        if cuartoJSON != nil {
            equiposList.removeAll(keepCapacity: false)
            //counts number of teams
            numeroDeEquipos = cuartoJSON["lista-equipos"].count
            println(numeroDeEquipos)

            //saves each variable and appends to a array
            for var index = 0; index < numeroDeEquipos;++index {
                var equipoID = Int(cuartoJSON["lista-equipos"][index]["EquipoID"].number!)
                var nomEquipo = cuartoJSON["lista-equipos"][index]["nomEquipo"].string
                var nomGrupo = cuartoJSON["lista-equipos"][index]["nomGrupo"].string

                var equiposNuevo = listaEquipos(equipoID: equipoID, nomEquipo: nomEquipo!, nomGrupo: nomGrupo!)
                equiposList.append(equiposNuevo)
                self.tableView.reloadData()
            }
            //loadingActivity.hideLoadingActivity(success: true, animated: false)
            //reloads data once json is complete
            self.tableView.reloadData()
        } else {
            //loadingActivity.hideLoadingActivity(success: false, animated: true)
            println("NIL JSON")
            }
        }

2 个答案:

答案 0 :(得分:2)

JSON是一种二进制格式,没有文本编码的概念(可以通过以application/开头而不是text/的mime类型推断.JSON总是编码为Unicode(UTF-8, UTF-16或UTF-32)从the specification(第8.1节)非常清楚。

可能是服务器向您发送了无效的JSON(错误地编码为Latin-1,这可能会使它看起来像解析器的坏UTF-8)。那么补救措施就是

  1. 修复服务器。
  2. 如果失败1.你需要某种黑客攻击:
    1. 使用Latin1字符编码
    2. 将NSData转换为NSString
    3. 使用UTF-8字符编码将NSString转换为NSData
    4. 解析JSON

答案 1 :(得分:0)

这对我有用:

xhr.overrideMimeType("application/json;charset=iso-8859-1");

自: Fetch json with non ASCI characters like ü, chrome displays network displays correctly