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
Vous devez vous connecter pour publier un commentaire.
Après beaucoup de recherches, et essaie de faire des choses de travail, j'ai enfin trouvé une solution pour le problème, c'est un simple ajout au code existant. La Solution a été d'utiliser le paramètre "UTF-8" dans le UrlEncodedFormEntity constructeur de la classe:
Après ce changement, les personnages ont été encodés et remis correctement pour le côté serveur.
Lorsque vous effectuez cette ligne
vous devez spécifier le jeu de caractères comme ceci
Vous pouvez aller à l'Android Developer savoir.
Construit une nouvelle UrlEncodedFormEntity avec la liste des paramètres avec l'encodage par défaut de DEFAULT_CONTENT_CHARSET
utilisateur finalString dans votre méthode post.
Ou je peut ajouter le code ci-dessous dans scriptlet en haut de mon test2.jspx qui permettra de résoudre le problème
J'ai aussi étaient confrontés au même problème. Mais pour le vérifier, j'ai écrit ci-dessous deux pages Jsp
-------------test1.jspx-----------------
Et puis ci-dessous les caractères accentués dans la première zone de saisie
ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ
Et la question est clairement visible que le navigateur Android ne peut pas gérer l'encodage UTF-8
dans les paramètres POST.
Je pense, je vais devoir utiliser la méthode GET et devrez ajouter "URIEncoding=UTF-8" pour le connecteur dans tomcat server.xml.
Cela a été le problème de l'Envoi de données UTF-8 à partir d'Android. Votre code va fonctionner très bien, sauf que vous devez coder votre
String
àBase64
. Sur le Serveur PHP vous venez de décoderBase64
Chaîne de retour. Il a travaillé pour moi. Je peux partager si vous avez besoin du code.