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

Fre*_*Loh 5 json swift swifty-json

我当前正在向 URL 发出请求。

\n\n

其中一个团队具有拉丁字符 \xc3\x91 ,这似乎使我的 JSON 为零,因此我将数据导出到的表中没有显示任何数据。我已经做了一些研究,我相信我需要将其编码为 NISOLatin1StringEncoding。

\n\n

我正在使用 SwiftyJSON 来解析 JSON。

\n\n
let cuartoURL = NSURL(string: cuartoURLString)\n\n    //initializes request\n    let request = NSURLRequest(URL: cuartoURL!)\n    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.currentQueue()) { response, jsonDataRequest4, error in\n        if jsonDataRequest4 != nil {\n\n        let dataRequest4 = jsonDataRequest4\n        //println(NSString(data:dataRequest4, encoding: NSUTF8StringEncoding))\n\n        //takes data, saves it as json\n        let cuartoJSON = JSON(data: jsonDataRequest4)\n\n        //checks to see that contents != nil, meaning the JSON file was found\n        if cuartoJSON != nil {\n            equiposList.removeAll(keepCapacity: false)\n            //counts number of teams\n            numeroDeEquipos = cuartoJSON["lista-equipos"].count\n            println(numeroDeEquipos)\n\n            //saves each variable and appends to a array\n            for var index = 0; index < numeroDeEquipos;++index {\n                var equipoID = Int(cuartoJSON["lista-equipos"][index]["EquipoID"].number!)\n                var nomEquipo = cuartoJSON["lista-equipos"][index]["nomEquipo"].string\n                var nomGrupo = cuartoJSON["lista-equipos"][index]["nomGrupo"].string\n\n                var equiposNuevo = listaEquipos(equipoID: equipoID, nomEquipo: nomEquipo!, nomGrupo: nomGrupo!)\n                equiposList.append(equiposNuevo)\n                self.tableView.reloadData()\n            }\n            //loadingActivity.hideLoadingActivity(success: true, animated: false)\n            //reloads data once json is complete\n            self.tableView.reloadData()\n        } else {\n            //loadingActivity.hideLoadingActivity(success: false, animated: true)\n            println("NIL JSON")\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

Kru*_*lur 3

JSON 是一种二进制格式,没有文本编码的概念(可以通过其application/以而不是开头的 mime 类型推断text/出。JSON 始终编码为 Unicode(UTF-8、UTF-16 或 UTF-32),这一点非常清楚规范(第 8.1 节)。

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

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