Post codé en UTF-8 données vers le serveur perd de certains personnages

Je suis en train de travailler sur un projet qui inclut la communication du serveur (JavaEE app) et le client (application Android). XML est envoyé en tant que l'un des POSTES les paramètres de la requête HTTP (nommé "xml"). Il y a aussi quelques autres paramètres POST que je passe à un serveur, mais en fonction ci-dessous je les ai retirées pour des raisons de simplicité. Problème qui se produit est que certaines lettres ne sont pas correctement transmis au serveur - par exemple le caractère Ű (Notez que ce n'est pas allemand Ü, qui est correctement mise en œuvre, par la voie). Code pour l'envoi est la suivante:

private String postSyncXML(String XML) {
    String url = "http://10.0.2.2:8080/DebugServlet/DebugServlet";
    HttpClient httpclient = new DefaultHttpClient();  

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("xml",XML));

    UrlEncodedFormEntity form;
    try {
        form = new UrlEncodedFormEntity(nameValuePairs);
                form.setContentEncoding(HTTP.UTF_8);
        HttpPost httppost = new HttpPost(url);

        httppost.setEntity(form);

        HttpResponse response = (HttpResponse) httpclient .execute(httppost);
        HttpEntity resEntity = response.getEntity();  
        String resp = EntityUtils.toString(resEntity);
        Log.i(TAG,"postSyncXML srv response:"+resp);
        return resp;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

Ma conjecture est que le problème est dans la BasicNameValuePair-je utiliser pour définir le format XML comme l'un des paramètres POST, et c'est de la documentation, dit-il utilise des caractères US-ASCII. Quelle est la bonne façon d'envoyer codé en UTF-8 POST champs?

  • pourriez-vous s'il vous plaît poster le formulaire.toString(); après le réglage de la contentEncoding? Et il serait également utile pour obtenir une copie complète de la sortie de la nameValuePairs liste. Je pense que si nous avons un oeil à ces deux, nous pouvons voir le problème.
  • Il n'était pas aussi trivial que l'aide du formulaire.toString() pour obtenir la façon dont le contenu est codé, mais le résultat est le suivant: au lieu de codage lettre comme une séquence d'octets "C5 " B0", il est codé en "1A". Donc, il semble que le formulaire n'est pas correctement l'encodage de ce personnage...
  • Cette solution peut résoudre mon problème, Essayez celui-ci : stackoverflow.com/a/6228377/1929078
InformationsquelleAutor dstefanox | 2011-03-11