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 d'affichage des caractères accentuées


Sujet :

Android

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut Problème d'affichage des caractères accentuées
    Bonjour,
    J'ai crée une application qui permet de récupérer des données à partir de google api places comme le nom , l'adresse ...
    Mon problème est l'affichage des caractères accentuées .
    Voila mon code de connexion au serveur :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    package com.example.projet_fin_etude;
     
    import java.io.BufferedReader;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.util.Log;
     
    public class JsonParser {
    	static InputStream is = null;
     
    	static JSONObject jObj = null;
     
    	static String json = "";
     
     
    	// Constructeur de notre classe
    	public JsonParser() {
     
    	}
     
    	public JSONObject getJSONFromUrl(String url) {
     
    	// début de la requête http
    	try {
     
    	// faire appel à defaultHttpClient
    	DefaultHttpClient httpClient = new DefaultHttpClient();
     
    	HttpPost httpPost = new HttpPost(url);
     
    	HttpResponse httpResponse = httpClient.execute(httpPost);
     
    	HttpEntity httpEntity = httpResponse.getEntity();
     
    	is = httpEntity.getContent();
     
    	} catch (UnsupportedEncodingException e) {
     
    	e.printStackTrace();
     
    	} catch (ClientProtocolException e) {
     
    	e.printStackTrace();
     
    	} catch (IOException e) {
     
    	e.printStackTrace();
     
    	}
     
    	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();
     
    	json = sb.toString();
     
    	} catch (Exception e) {
     
    	Log.e("Buffer Error", "Error converting result " + e.toString());
     
    	}
     
    	// convertir le résultat qui est sous format d'un String en un JSONObject
    	try {
     
    	jObj = new JSONObject(json);
     
    	} catch (JSONException e) {
     
    	Log.e("JSON Parser", "Error parsing data " + e.toString());
     
    	}
     
    	// retourner un JSONObject
    	return jObj;
     
    	}
    }

    Aidez moi s'il vous plait et merci d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Le code du JSONParser n'est pas terrible....

    1. La gestion des exceptions n'est pas faite:
    - Utiliation de e.printStackTrace au lieu de Log.e("JSONParser","Erreur pour faire cela",e);
    - Passage sous silence des exceptions (exception à la connexion => is est null mais on continue quand même => crash avec un NullPointerException)

    2. Utilisation de références statiques sur des ressources (InputStream) rendant l'objet non réentrant (problématique quand on sait qu'il doit être utilisé dans un thread) !!!!!!

    3. Réinvention de la roue (code de lecture du stream), avec non gestion du character encoding de la réponse HTTP (d'où le problème d'accents)

    4. Mauvaise indentation (mais c'est peut être du à autre chose): je conseille de passer l'éditeur en mode "remplacer les tabs par des espaces"...


    Voila la classe réécrite et commentée:

    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
     
    public class JsonParser {
     
        // Constructeur désactivé, on ne veut pas d'instances !
        private JsonParser() { }
     
        // fonction statique
        // elle renvoit les exceptions nécessaire à celui qui appele la fonction.
        public JSONObject getJSONFromPost(String url) throws MalformedUrlException, IOException, JSONException, ClientProtocolException {
            HttpPost httpPost = new HttpPost(url);
            return getJSONFrom(httpPost);
        }
     
        public JSONObject getJSONFrom(HttpUriRequest req) throws ClientProtocolException, IOException, JSONException
        {
    	// on récupère un client 
    	DefaultHttpClient httpClient = new DefaultHttpClient();
     
            // on effectue l'opération (ClientProtocolException/IOException)
    	HttpResponse httpResponse = httpClient.execute(req);
     
            // on s'assure que la réponse est ok:
            if (httpResponse.getStatusLine().getStatusCode()>=400) 
                throw new IOException(httpResponse.getStatusLine().getReasonPhrase());
     
            // on récupère les données de la réponse (IOException)
    	HttpEntity httpEntity = httpResponse.getEntity();
     
            // on les transforme en chaîne de caractères:
            String jsonStr = EntityUtils.toString(httpEntity);
            // petit log en mode 'debug' histoire de ne pas polluer un vrai device
            Log.d("JSONParser","Received data:\n"+jsonStr);
     
            // on décode le JSON (JSONException)
            return new JSONObject(jsonStr);
        }
     
    }
    Bien sur c'est à l'appelant de cette fonction de vérifier les exceptions donc en général:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JSONObject result = null;
    try {
       result = JSONParser.getJSONFromPost(url);
    } catch (Exception ex) {
       Log.e(MYTAG,"Couldn't retrive data !",ex);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    Merci beaucoup pour vos remarques .
    Mais comment peut on afficher les caractères accentuées ???

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Comme tous les autres caractères ... je ne vois pas le problème....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour tout le monde,
    Les caractères accentuées ne s'affichent pas encore .
    Je vais vous poster l'affichage sur l'émulateur .
    Aidez moi s'il vous plait .
    Images attachées Images attachées  

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    On a bien compris....

    Donc il y a un problème de lecture UTF-8....

    Quel est l'état du code actuel (en particulier concernant le décodage de l'entity) ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Etudiante
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    J'ai essayé avec votre code nicroman et tout marche bien .
    Merci beaucoup pour votre aide et vos conseils et bonne journée .

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

Discussions similaires

  1. problème d'affichages des caractère accentué
    Par ryodo dans le forum Langage
    Réponses: 1
    Dernier message: 22/08/2010, 21h03
  2. XML : Problème d'affichage des caractères spéciaux
    Par steph43800 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 11/07/2007, 09h18
  3. Problème d'affichage des caractères accentués
    Par Neuromancien2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 07/07/2007, 13h43
  4. [AJAX] Affichage des caractères spéciaux
    Par mitmit dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/04/2007, 13h47
  5. Problème d'affichage des caractères accentués
    Par ostaquet dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 06h58

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