TsCyrille Posté(e) 28 juillet 2010 Posté(e) 28 juillet 2010 Bonjour Je génère un XML via une page PHP : je récupère dans une String ce XML sur android via un accès HTTP. Voici comment je fais : DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost methodpost = new HttpPost(sURL); ArrayList nameValuePairs = new ArrayList(2); nameValuePairs.add(new BasicNameValuePair("param1","param1")); nameValuePairs.add(new BasicNameValuePair("param2","param2")); UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); methodpost.addHeader("Pragma", "no-cache"); HttpResponse res = httpClient.execute(methodpost); InputStream data = res.getEntity().getContent(); Dans l'entête de mon fichier XML, je mets : <?xml version="1.0" encoding="ISO-8859-1"?> Je récupère bien dans une chaine le XML généré par la page appelée. Par contre, j'ai un souci avec les accents : j'ai des caractères chinois dans la chaine. Pourquoi ? Si quelqu'un à une idée... Merci d'avance
akex Posté(e) 28 juillet 2010 Posté(e) 28 juillet 2010 Si tu encodes tes paramètres en utf-8 c'est que le serveur que tu interroges en a besoin non ? Donc il te renvoie nécessaire une chaine en utf-8. Je ne sais pas si c'est super avec un xml encodé en ansi ... Et pourquoi ne pas décoder le InputStream en iso avant ?
TsCyrille Posté(e) 28 juillet 2010 Auteur Posté(e) 28 juillet 2010 Voilà comment je lis le InputStream : private String generateString(InputStream stream) { InputStreamReader reader = new InputStreamReader(stream); BufferedReader buffer = new BufferedReader(reader); StringBuilder sb = new StringBuilder(); try { String cur; while ((cur = buffer.readLine()) != null) { sb.append(cur).append("\n"); } } catch (IOException e) { e.printStackTrace(); } try { stream.close(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } Que veux tu dire en parlant de décoder le InputStream avant ?
TsCyrille Posté(e) 3 août 2010 Auteur Posté(e) 3 août 2010 J'ai trouvé une solution : pour lire mon InputStream, j'utilise la classe InputStreamReader à laquelle j'indique le type d'encodage : Charset charset = Charset.forName("ISO_8859_1"); CharsetDecoder charsetDecoder = charset.newDecoder(); InputStreamReader reader = new InputStreamReader(data, charsetDecoder); Merci pour votre aide...
akex Posté(e) 3 août 2010 Posté(e) 3 août 2010 C'était l'idée. Désolé je n'avais pas vu ta réponse. Ravi que tu ais pu trouver comment faire.
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.