Autore Topic: Caratteri speciali che passione  (Letto 1131 volte)

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Caratteri speciali che passione
« il: 28 Maggio 2013, 11:58:08 CEST »
0
Sicuramente questo problema è già uscito fuori, ma nonostante abbia cercato non sono riuscito a risolvere.
Ho una applicazione Android che interroga il db tramite script php.
Il problema è che quando faccio una insert e inserisco caratteri accentanti, al momento della scrittura mi taglia la stringa dal carattere accentato in poi.

Ho provato a settare a UTF-8 tutto: il mio db, lo script php con un editore di testo, il codice Java di android, penso tutto!

Il db è settato a utf8_unicode_ci

Questo il mio codice PHP:
Codice: [Seleziona]
<?php
header('Content-type: text/html;charset=utf-8');

mysql_connect(--);
mysql_select_db(--);

mysql_query("SET CHARACTER SET utf8");

//Inserimento
mysql_query("INSERT INTO testo(utente, descrizione) VALUES ('".$_REQUEST['utente']."', '".$_REQUEST['descrizione']."');

?>

Questo il mio codice Java:
Codice (Java): [Seleziona]
private class InviaTask extends AsyncTask<Void,String,String>  {
        protected String doInBackground(Void... params) {              
                    ArrayList<NameValuePair> dati = new ArrayList<NameValuePair>();
                    dati.add(new BasicNameValuePair("utente",utente));
                    dati.add(new BasicNameValuePair("descrizione",desc));
               
                    try{
                        HttpClient httpclient = new DefaultHttpClient();
                        HttpPost httppost = new HttpPost("http://www.miosito.it/invia.php");
                        httppost.setEntity(new UrlEncodedFormEntity(dati));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                       
                        }catch(Exception e){
                            Log.e("log_REMOTO", "Errore nella connessione HTTP: "+e.toString());
                       }
                         
                    try{
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8);
                        StringBuilder sb = new StringBuilder();
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");        
                        }
                        is.close();
                        result = "OK";
                        }catch(Exception e){
                                  Log.e("log_REMOTO", "Errore nella conversione del risultato: "+e.toString());
                       }
                        return result;
        }
    }

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:Caratteri speciali che passione
« Risposta #1 il: 28 Maggio 2013, 14:02:16 CEST »
0
Se lanci la stessa identica HTTP request in un browser, come ti appaiono i caratteri accentati?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Caratteri speciali che passione
« Risposta #2 il: 28 Maggio 2013, 14:44:38 CEST »
0
il problema dei charset è sempre stata una bella tegola... ci sono vari link in giro che spiegano come e cosa per capire meglio:
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) - Joel on Software
Java encodings and charset
generalmente i caratteri accentati stanno nel charset ISO-8859-1
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Caratteri speciali che passione
« Risposta #3 il: 28 Maggio 2013, 15:25:22 CEST »
0
Il problema è che io avevo una iso-8859-1 e i caratteri accentati me li prendeva, ma ho dovuto cambiare in utf8 perché non mi leggeva i caratteri speciali: ', ", @, ecc
Il bello è che avevo letto su internet che l'utf8 mastica anche il cinese e che comprendeva tutti i caratteri...

@bradipao intendi che devo fare la prova a lanciare lo script php da browser?
Se si, come faccio a passare i valori della insert?

« Ultima modifica: 28 Maggio 2013, 15:43:06 CEST da Ivan86 »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Caratteri speciali che passione
« Risposta #4 il: 28 Maggio 2013, 15:57:16 CEST »
0
Stai attento anche alle sql injection... se il codice che usi in produzione è quello che vedo direi che dovresti preoccuparti ;)

Offline Ivan86

  • Utente junior
  • **
  • Post: 139
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S II
  • Sistema operativo:
    Windows 7
Re:Caratteri speciali che passione
« Risposta #5 il: 28 Maggio 2013, 16:58:43 CEST »
0
ho risolto mettendo nello script php:
mysql_query( "SET CHARACTER SET iso-8859-1");

eppure lo usavo anche prima... bho
grazie cmq

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:Caratteri speciali che passione
« Risposta #6 il: 28 Maggio 2013, 17:07:59 CEST »
0
Una cosa sono dei dati con un determinato set di caratteri, un altra cosa è impostare un set di caratteri, sono due cose molto diverse e se si confondono non funziona nulla.

Se un database usa i caratteri iso-8859-1 (usato di solito da chi usa i sistemi operativi microsoft) e poi dici che sono UTF-8 (consigliato dal w3.org per le pagine web e usato nei sistemi operativi Linux) o UTF-16 (usato internamente da Java dalle ultime versioni, inizialmente era UCS-2) chi gli legge si arrabbia e appena incontra un carattere non valido si ferma e di solito segnala errore.

Se i dati sono iso-8859-1 basta comunicare il set giusto e chi gli riceve non si arrabbia altrimenti gli devi convertire fisicamente (lettura, conversione, riscrittura) al set desiderato con dei programmi di conversione, non basta impostarlo.

Esisto dei software per rilevare il set corretto, come "file" e convertili, come "iconv", sono presenti in tutti i sistemi operativi Linux, ignoro i loro equivalenti sotto altri sistemi operativi.

P.S. Vedo che ora hai impostato il set corretto usato per memorizzare i dati nel database.
adb logcat | tee /tmp/logcat | grep TAG