2015-07-21 1 views
2

В настоящее время я делаю запрос на URL-адрес.Запрос 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

JSON представляет собой бинарный формат, и не имеет понятия кодировки текста (как можно судить по его типу мим, начиная с application/, а не text/. JSON всегда кодируется как Unicode (UTF-8, UTF-16 или UTF-32), так как это очень ясно из the specification (раздел 8.1).

Возможно, сервер отправляет вам недействительный JSON (некорректно закодированный как латинский-1, который, вероятно, сделает его похожим на плохой UTF-8 на парсер). Тогда было бы исправлено

  1. Исправить сервер ,
  2. Если недостаток 1., вам нужно какое-то хак:
    1. Преобразование NSData в NSString с использованием latin1 Кодировка символов
    2. Преобразовать NSString в NSData с использованием UTF-8 кодировку
    3. Разбор JSON
+0

Из-за природы имен/и т.д. людей, что мы имеем дело с мы используем ISO-8859-1 в качестве кодировки. Я использую swiftyJSON для анализа JSON, есть ли способ для меня просто изменить кодировку, которую использует swiftyJSON? Вот исходный файл: https://raw.githubusercontent.com/SwiftyJSON/SwiftyJSON/master/Source/SwiftyJSON.swift – FredLoh

+0

Ну, ну, UTF-8 поддерживает все символы, которые Latin-1 может представлять, и многое другое. – Krumelur