Sto prelevando i dati da remoto JSON a http://hndroidapi.appspot.com/news/format/json/page/?appid=test. Il problema che sto incontrando è che questa API sembra costruire il JSON senza gestire correttamente la codifica UTF-8 (correggimi se ho torto qui). Ad esempio, parte del risultato che viene passato in questo momento èGestione di UTF-8 non valido da json, in ruby
{
"title":"IPad - please don€™t ding while you and I are asleep ",
"url":"http://modern-products.tumblr.com/post/25384729998/ipad-please-dont-ding-while-you-and-i-are-asleep",
"score":"10 points",
"user":"roee",
"comments":"18 comments",
"time":"1 hour ago",
"item_id":"4128497",
"description":"10 points by roee 1 hour ago | 18 comments"
}
Avviso del don€™t
. E questo non è l'unico tipo di personaggio a cui sta soffocando. C'è qualcosa che posso fare per convertire i dati in qualcosa di pulito, dato che non controllo l'API?
Edit:
Ecco come sto tirando giù il JSON:
hn_url = "http://hndroidapi.appspot.com/news/format/json/page/?appid=test"
url = URI.parse(hn_url)
# Attempt to get the json
req = Net::HTTP::Get.new(hn_url)
req.add_field('User-Agent', 'Test')
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) }
response = res.body
if response.nil?
puts "Bad response when fetching HN json"
return
end
# Attempt to parse the json
result = JSON.parse(response)
if result.nil?
puts "Error parsing HN json"
return
end
Edit 2:
appena trovato la pagina GitHub del API. Sembra che questo sia un problema eccezionale. Ancora non è sicuro se ci sono soluzioni alternative che posso fare dal mio fine: https://github.com/glebpopov/Hacker-News-Droid-API/issues/4
Sembra che il corpo di risposta JSON che si sta ricevendo possa includere simboli HTML-safe. Non vedo nessun cattivo carattere a prima vista, e vedo che l'intestazione di risposta Content-Type è impostata su 'application/json; charset = utf-8', che sembra corretto. Come stai ottenendo il corpo della risposta? Vorrei provare ad esaminare la risposta con uno strumento del browser come "Dev HTTP Client" o CURL, e vedere se l'applicazione sta diventando diversa dalla risposta effettiva. In tal caso, potresti gestirlo in modo errato nel tuo codice. –
Grazie. Ho aggiunto il mio codice nella modifica. Il problema, tuttavia, è che sono simboli HTML-safe. Ma non dovrebbe essere un simbolo dell'euro e un simbolo "tm". Dovrebbe essere un apostrofo. – hodgesmr
È possibile visualizzare la risposta esatta nella console utilizzando 'puts res.body'. Stai vedendo i simboli funky in seguito tramite l'oggetto 'result'? –