Autore Topic: problema lettere accentate da remoto  (Letto 1628 volte)

Offline nyles82

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Desire S
  • Sistema operativo:
    Windows 7
problema lettere accentate da remoto
« il: 10 Maggio 2012, 17:03:54 CEST »
0
Ciao a tutti!

Ho fatto una classe che va a prendere da remoto (tramite web service) il testo della pagina in html.

Il metodo che ho usato è:
Codice (Java): [Seleziona]
((TextView) findViewById(R.id.info_txt_info1)).setText(Html.fromHtml(MIOTESTO));
l'html che mi arriva è corretto perchè lo prelevo anche da iOS e da WP7 e si visualizza correttamente pero.....

Tutte le lettere accentate vengono sostituite da un bel punto di domanda.

Come faccio a cambiare encoding o cmq a risolvere il problema?

Grazie  :D

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:problema lettere accentate da remoto
« Risposta #1 il: 10 Maggio 2012, 17:31:30 CEST »
0
In Java e presumo quindi valga anche per Android, le stringhe sono in formato UTF16, per giocare con i vari encoding si può usare le classi del package java.nio.charset.* però devi sapere qual'è l'encoding usato nella pagina che vai a leggere.

Offline nyles82

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Desire S
  • Sistema operativo:
    Windows 7
Re:problema lettere accentate da remoto
« Risposta #2 il: 10 Maggio 2012, 17:39:38 CEST »
0
So per certo che la stringa che mi arriva è senza encoding, pero volendo posso farmela mandare in utf8

dove trovo un esempio di come utilizzare nio.charset?

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:problema lettere accentate da remoto
« Risposta #3 il: 10 Maggio 2012, 17:51:09 CEST »
0
Per essere senza encoding dovrebbe usare puro ASCII, solo codici dal 0 al 127, quindi niente accentate.
Più probabilmente è una pagina mal formata che utilizza un encoding ma non lo dichiara.

Per l'esempio purtroppo non ho nulla sotto mano, se trovo qualcosa te lo posto.

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:problema lettere accentate da remoto
« Risposta #4 il: 10 Maggio 2012, 18:24:25 CEST »
0
Sto facendo qualche prova e mi sono imbattuto in un'utile info: in Android il Charset di default è proprio l'UTF-8, quindi se riesci a farti spedire la stringa formattata in UTF-8 probabilmente non ti serve fare altro, la dovrebbe convertire automaticamente in UTF-16 per uso interno.

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:problema lettere accentate da remoto
« Risposta #5 il: 10 Maggio 2012, 18:57:09 CEST »
0
Visto che ormai l'ho scritto, posto anche il codice d'esempio:

Codice (Java): [Seleziona]
package prova.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import java.nio.charset.*;
import java.nio.ByteBuffer;

public class EncodingActivity extends Activity
{ public static byte[] Accenti = {(byte)0xe0,   // à
                                  (byte)0xe8,   // è
                                  (byte)0xec,   // ì
                                  (byte)0xf2,   // ò
                                  (byte)0xf9};  // ù

  @Override
  public void onCreate(Bundle savedInstanceState)
         { super.onCreate(savedInstanceState);
           Charset U8 = Charset.forName("UTF-8");
           Charset ISO = Charset.forName("ISO-8859-1");
           ByteBuffer Bb = ByteBuffer.wrap(Accenti);
           String DecU8 = U8.decode(Bb).toString();
           Bb.position(0);
           String DecISO = ISO.decode(Bb).toString();
           String NonDecodificata = new String(Accenti);
           LinearLayout LL = new LinearLayout(this);
           LL.setOrientation(LinearLayout.VERTICAL);
           TextView TV1 = new TextView(this);
           TextView TV2 = new TextView(this);
           TextView TV3 = new TextView(this);
           LL.addView(TV1);
           LL.addView(TV2);
           LL.addView(TV3);
           TV1.setText(DecU8);
           TV2.setText(DecISO);
           TV3.setText(NonDecodificata);
           setContentView(LL);
         }
}

L'array Accenti è caricato con i codici delle 5 vocali accentate secondo la codifica ISO-8859-1.
Nel esempio uso l'array per caricare direttamente una stringa oppure lo decodifico secondo lo standard UTF-8 o ISO-8859-1.
Le 3 textview mostrano le stringhe, ovviamente l'unica corretta è quella decodificata con ISO-8859-1.

Ciao!

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:problema lettere accentate da remoto
« Risposta #6 il: 10 Maggio 2012, 20:41:20 CEST »
0
API di Android è pieno di funzioni per la conversione molto efficienti e veloci senza reinventarsele, basta usarle. La classe String ha i metodi per le conversioni, anche le classi InputStreamReader, OutputStreamWriter e altre possono facilmente convertire il set di caratteri. Molti problemi sul set di caratteri si risolvono con la coerenza.
adb logcat | tee /tmp/logcat | grep TAG

Offline zaxxon

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    Archos 101 G9
  • Sistema operativo:
    Ubuntu 10.04
Re:problema lettere accentate da remoto
« Risposta #7 il: 10 Maggio 2012, 22:51:36 CEST »
0
java.nio.charset.* è uno dei package presenti in Android, nessuno ha detto di aver inventato nulla!


Offline nyles82

  • Nuovo arrivato
  • *
  • Post: 29
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Desire S
  • Sistema operativo:
    Windows 7
Re:problema lettere accentate da remoto
« Risposta #8 il: 14 Maggio 2012, 10:39:47 CEST »
0
Vi ringrazio ragazzi, ho risolto in 2 modi:

1- Dal servizio mi faccio mandare il carattere di escape
2- Nella classe ho utilizzato l'esempio di codice per convertire a mia volta cosi sono in una botte di ferro :)

thankssssssss