JSON 请求 accents/latin 个字符
JSON request with accents/latin characters
我目前正在向 URL 提出请求。
其中一个团队有拉丁字符 Ñ,这似乎使我的 JSON 为零,因此我要将数据导出到的 table 中没有显示任何数据。我做了一些研究,我认为我需要将其编码为 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")
}
}
JSON 是一种二进制格式,没有文本编码的概念(可以从其以 application/
而不是 text/
开头的 mime 类型推断出来)。 JSON始终编码为 Unicode(UTF-8、UTF-16 或 UTF-32),这在 the specification(第 8.1 节)中非常清楚。
可能是服务器向您发送了无效的 JSON(错误编码为 Latin-1,这可能会使解析器看起来像错误的 UTF-8)。那么补救措施就是
- 修复服务器。
- 如果 1. 失败,您需要一些技巧:
- 使用 Latin1 字符编码将 NSData 转换为 NSString
- 使用 UTF-8 字符编码将 NSString 转换为 NSData
- 解析JSON
这对我有用:
xhr.overrideMimeType("application/json;charset=iso-8859-1");
来自:
Fetch json with non ASCI characters like ü, chrome displays network displays correctly
我目前正在向 URL 提出请求。
其中一个团队有拉丁字符 Ñ,这似乎使我的 JSON 为零,因此我要将数据导出到的 table 中没有显示任何数据。我做了一些研究,我认为我需要将其编码为 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")
}
}
JSON 是一种二进制格式,没有文本编码的概念(可以从其以 application/
而不是 text/
开头的 mime 类型推断出来)。 JSON始终编码为 Unicode(UTF-8、UTF-16 或 UTF-32),这在 the specification(第 8.1 节)中非常清楚。
可能是服务器向您发送了无效的 JSON(错误编码为 Latin-1,这可能会使解析器看起来像错误的 UTF-8)。那么补救措施就是
- 修复服务器。
- 如果 1. 失败,您需要一些技巧:
- 使用 Latin1 字符编码将 NSData 转换为 NSString
- 使用 UTF-8 字符编码将 NSString 转换为 NSData
- 解析JSON
这对我有用:
xhr.overrideMimeType("application/json;charset=iso-8859-1");
来自: Fetch json with non ASCI characters like ü, chrome displays network displays correctly