IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Problème affichage caractères accentués


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut Problème affichage caractères accentués
    bonjour,
    j'ai un problème de caractères accentués que je n'arrive pas à résoudre

    j'ai un service web qui recupere des données en JSON via une base de données MySQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php  
    include("../includes/connect_mysql.php");
    $dblink=connect_mysql();
    $sql = mysql_query("SELECT ....",$dblink);
    while($row=mysql_fetch_assoc($sql))  
    $output[]=$row; 
    print(json_encode($output));  
    mysql_close();  
    ?>

    ensuite je récupére correctement les données pour les afficher dans mon appli android, mais dès que j'ai des mots avec des accents (é,è, etc.), j'obtiens la chaîne "null" à la place
    j'ai essayé de faire utf8_encode($output) avant d'encoder en json, mais cela ne fonctionne pas ... je n'obtiens alors que {Array,Array,...} au lieu d'avoir une structure complète et donc cela ne m'affiche plus rien

    quelqu'un a t il une idée ?

    voici le code android

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    try{  
                  HttpClient httpclient = new DefaultHttpClient();  
                  HttpPost httppost = new HttpPost(strURL);  
                  httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
                  HttpResponse response = httpclient.execute(httppost);  
                  HttpEntity entity = response.getEntity();  
                  is = entity.getContent();  
                }catch(Exception e){  
                  Log.e("log_tag", "Error in http connection " + e.toString());  
                  }  
            // Conversion de la requête en string  
            try{  
                  BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);  
                  StringBuilder sb = new StringBuilder();  
                  String line = null;  
                  while ((line = reader.readLine()) != null) {  
                  sb.append(line + "\n");  
                  }  
                  is.close();  
                  result=sb.toString();  
                }catch(Exception e){  
                  Log.e("log_tag", "Error converting result " + e.toString());  
                  }  
                 // Parse les données JSON  
             try{  
                  JSONArray jArray = new JSONArray(result);  
                  for(int i=0;i<jArray.length();i++){  
                  JSONObject json_data = jArray.getJSONObject(i);  
                  // Affichage ID_login et Nom_login 
                 //Log.i("log_tag","Numéro de membre : "+json_data.getInt("NumMembre")+  
                 //       ", Nom_login: "+json_data.getString("Login")  
                  //      );  
              // Résultats de la requête  
               returnString += "\n\t" + jArray.getJSONObject(i); 
               returnString2 += "\n\t" + json_data.getString("Auteur");
               returnString2 += "," + json_data.getString("Titre");
               returnString2 += "," + json_data.getString("year");
               }  
                  }catch(JSONException e){  
            Log.e("log_tag", "Error parsing data " + e.toString());  
                 }
             //byte[] result2 = returnString2.getBytes("UTF-8"); 
    		return returnString2;
    j'ai aussi essayé de convertir au niveau d'android avec getBytes mais je pense que je maitrise mal cette technique, car elle ne fonctionne pas non plus

    merci

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Essaye avec Html.fromHtml(stringAvecCaractereSpeciaux);.


    Doc : http://developer.android.com/reference/android/text/Html.html

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    merci pour cette piste

    j'ai essayé :
    String returnString3 = Html.fromHtml(returnString2);
    return returnString3;

    Eclipse me dit : "cannot convert from String to Spanned"

    et lorsque je mets Spanned à la place de String, c'est ma ligne return qui coince : cannot convert from Spanned to String

    comment puis-je faire pour résoudre ce souci ?

    cdlt,

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Ben, un simple return returnString3.toString(); devrait suffire, non ?

    Sinon, changer le type de retour de ta méthode de "String" à "Spanned", à priori, c'est le problème soulevé dans ton dernier message.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    oui, cela permet d'enlever l'erreur, mais malheureusement j'ai toujours des "null" à la place de mes données accentuées sur le terminal, et mes sauts de ligne ne sont plus pris en compte

    j'ai vérifié ensuite ce qui ressort du JSON et les null apparaissent déjà lorsque je lance mon script dans un navigateur ... donc le code java n'est sans doute pas en cause ! j'aurais du regarder avant

    voici le lien du script php qui est appelé
    http://www.medianeo.net/android/check_books.php

    j'ai mis l'instruction
    header('content-type: text/html; charset=utf-8' );
    dans mon code PHP pour forcer en UTF-8 mais ça ne change rien,

    donc je peux en déduire que le problème se trouve ailleurs dans mon script PHP ou au niveau de la base SQL


    comment puis-je connaitre l'encodage qui ressort de ma requete SQL ? afin de voir si le problème vient de là ?


    encore merci

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    le navigateur m'affiche par exemple des \u00e9 à la place des "é"

    je ne comprends pas pourquoi, et l'origine du problème vient de là, avez-vous une idée

    voici le code du script PHP qui génère ce résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php 
    header('content-type: text/html; charset=utf-8'); 
    include("../includes/connect_mysql.php");
    $dblink=connect_mysql();
    mysql_set_charset('utf8',$dblink);
    $_REQUEST['Login']="floston";
    $sql = mysql_query("SELECT DISTINCT Auteur,Titre,year,B.Lu FROM media_biblio_books AS A, media_biblio_books_perso  AS B WHERE A.Num=B.Num AND B.Login='".$_REQUEST['Login']."' AND Lu=1",$dblink);
    $num = mysql_num_rows($sql);
    while($row=mysql_fetch_assoc($sql)) 
    $output[]=array_map("utf8_encode",$row); //traîtement utf8 appliquée à chaque ligne 
    print(json_encode($output));  
    mysql_close();  
    ?>
    Est-ce que quelqu'un aurait une idée concernant ce problème ?

  7. #7
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Tu as géré l'encodage utf-8 dans la réponse http. Essayes de la gérer également dans la requête http, avec un truc dans le genre :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpUriRequest httppost = new HttpPost(strURL);
    httppost.addHeader("Accept-Charset", "utf-8");
    // ...
    httpclient.execute(httppost);

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 64
    Points
    64
    Par défaut
    bravo !
    cela venait simplement du header en effet, alors que je me tuais a chercher du coté de mon script !!
    merci beaucoup

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    J'ai exactement le même problème que Aztec.
    Lorsque ma chaine comprend un caractère accentué, je récupère null.
    J'ai essayé comme indiqué en ajoutant le header mais rien ne change...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème d'affichage caractères accentués dans un TextBlock
    Par azstar dans le forum Windows Phone
    Réponses: 9
    Dernier message: 15/06/2012, 15h26
  2. Problème affichage caractères accentués
    Par zerimbak dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 19/04/2011, 23h32
  3. Problème affichage caractères accentués
    Par samtgr2000 dans le forum Administration
    Réponses: 0
    Dernier message: 18/05/2010, 17h08
  4. Réponses: 5
    Dernier message: 25/01/2007, 00h22
  5. [MiniPascal] Problème de caractères accentués
    Par Clandestino dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/10/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo