Autore Topic: Codifica non utf-8  (Letto 1220 volte)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Codifica non utf-8
« il: 03 Maggio 2012, 09:11:56 CEST »
0
Salve ricevo un json da un server ma tutti gli accenti sono errati. Ho controllato è la codifica del server non è utf-8. C'è un modo per risolvere anche lato client?

Inviato dal mio Galaxy Nexus con Tapatalk 2
La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Codifica non utf-8
« Risposta #1 il: 03 Maggio 2012, 09:34:34 CEST »
0
Tratto direttamente dalla specifica JSON ( http://www.ietf.org/rfc/rfc4627.txt?number=4627 ):

Citazione
3.  Encoding
   JSON text SHALL be encoded in Unicode.  The default encoding is UTF-8.

Sicuro che il problema sia la codifica in uscita dal server?

Un problema relativamente comune è scrivere caratteri non-utf-8 dicendo che invece si tratta di utf-8.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Codifica non utf-8
« Risposta #2 il: 03 Maggio 2012, 09:56:14 CEST »
0
Si mi hanno confermato che la codifica in uscita non è utf-8

>Un problema relativamente comune è scrivere caratteri non-utf-8 dicendo che invece si tratta di utf-8.

Cioè?
La domanda stupida è quella che non si fa

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Codifica non utf-8
« Risposta #3 il: 03 Maggio 2012, 10:14:21 CEST »
0
Scrivo un po di codice.

Codice (Java): [Seleziona]
        public JSONObject getJSONObj(String url){
                JSONObject jsonObj=null;
                HttpURLConnection conn= null;
                try {
                         conn = (HttpURLConnection) new URL(url).openConnection();
                } catch (MalformedURLException e) {
                       
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                InputStream in = null;
                try {
                        in = conn.getInputStream();

                } catch (Exception e) {
                        JSONObject js = null;
                        return js;
                }
                try {
                        StringBuilder sb = new StringBuilder();
                       
                        //BufferedReader r = new BufferedReader(new InputStreamReader());
                       
                       
                        BufferedReader r = new BufferedReader(new InputStreamReader(
                                        new DoneHandlerInputStream(in), "utf-8"));
                       
                        for (String line = r.readLine(); line != null; line = r.readLine()) {
                                sb.append(line);
                               
                        }
                       
                        jsonObj= new JSONObject(sb.toString());
                } catch (IOException e) {
                       
                        e.printStackTrace();
                        JSONObject js = null;
                        return js;
                } catch (JSONException e) {
                        e.printStackTrace();
                } finally {
                        try {
                                in.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                                JSONObject js = null;
                                return js;
                        }
                }

                return jsonObj;
        }

Uso questo codice per ottenere la stringa json, ma gli accenti sono sempre non corretti.
La domanda stupida è quella che non si fa

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Codifica non utf-8
« Risposta #4 il: 03 Maggio 2012, 10:52:05 CEST »
0
Prima di tutto bisognerebbe capire qual'è la reale codifica di quello che ricevi ;)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Codifica non utf-8
« Risposta #5 il: 03 Maggio 2012, 11:17:52 CEST »
0
>Un problema relativamente comune è scrivere caratteri non-utf-8 dicendo che invece si tratta di utf-8.
Cioè?

Magari il JSON viene spedito con codifica UTF-8 (anche solo per essere conforme allo standard RFC4627 che descrive il JSON), ma i byte spediti sono in realtà codificati ISO-8859-1.

E' come se tu spedissi un'email dicendo che è in inglese ed invece scrivi in italiano, a questo punto un eventuale traduttore automatico da inglese ad italiano prende in pasto l'email e cerca di tradurla dall'inglese all'italiano, con risultati che puoi ben immaginare.

Come dice Ricky, prima di capire l'esatta sequenza di operazioni per recuperare correttamente i caratteri, occorre sapere la codifica.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Codifica non utf-8
« Risposta #6 il: 03 Maggio 2012, 11:18:34 CEST »
0
Ricevo questa codifica...

ISO-8859-1

La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Codifica non utf-8
« Risposta #7 il: 03 Maggio 2012, 11:35:58 CEST »
+1
In modo molto grezzo (nel senso che non ho mai provato), cambiare questo:

Codice (Java): [Seleziona]
BufferedReader r = new BufferedReader(new InputStreamReader(
                                        new DoneHandlerInputStream(in), "utf-8"));

...in questo...

Codice (Java): [Seleziona]
BufferedReader r = new BufferedReader(new InputStreamReader(
                                        new DoneHandlerInputStream(in), "iso-8859-1"));

potrebbe essere un primo tentativo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Codifica non utf-8
« Risposta #8 il: 03 Maggio 2012, 12:50:30 CEST »
0
Hanno risolto  lato server... avevano detto che non potevano cambiare... ho discusso e ridiscusso ma nada... e ora magicamente hanno risolto... bah..

Scusate il post :(
La domanda stupida è quella che non si fa