Apache HttpClient – post demande à ETools.ch avec les caractères utf-8 dans la requête

Le code fonctionne correctement si la requête ne contient aucun caractère utf-8. Dès qu’il y a un caractère utf-8, ETools fournit des résultats inattendus. Par exemple pour les "trees" j’obtiens un résultat correct et pour "bäume" (mot allemand pour les arbres), j’ai des résultats étranges. Il semble que ETools reçoive la requête en tant que "b%C3%A4ume" et recherche exactement cette requête avec ces caractères exacts et non pour "bäume" . Je pense que le problème pourrait être résolu si je définissais des parameters d’en-tête mais je ne sais pas quels parameters sont possibles.

 Ssortingng query = "some+query+with+utf8+chars"; HttpClient client = new DefaultHttpClient(); HttpPost request = new HttpPost(); List parameters = new ArrayList(); parameters.add(new BasicNameValuePair("query", query)); parameters.add(new BasicNameValuePair("country", "web")); parameters.add(new BasicNameValuePair("language", "all")); parameters.add(new BasicNameValuePair("dataSourceResults", Ssortingng.valueOf(40))); parameters.add(new BasicNameValuePair("pageResults", Ssortingng.valueOf(40))); request.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8")); request.setHeader("Content-Type", "application/x-www-form-urlencoded"); request.setURI("http://www.etools.ch/searchAdvancedSubmit.do?page=2"); MyResponse myResponse = client.execute(request, myResponseHandler); request.reset(); client.getConnectionManager().shutdown(); 

Vous devez append votre charset dans le Content-Type au moins (la valeur par défaut est latin1):

 request.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 

Si cela ne fonctionne pas, cela peut être un bogue de serveur. Vous voudrez peut-être essayer de soumettre le formulaire en tant que multipart/form-data ( RFC 2388 ) au lieu d’URL codé. Il existe déjà une réponse StackOverflow avec un exemple que vous pouvez utiliser.