L'encodage UTF-8 problème avec servlet et apache HttpClient
J'ai une servlet qui envoie une chaîne de caractères avec l'encodage utf-8. Aussi, j'ai un client écrit avec apache httpcomponents bibliothèque.
Mon problème est la lecture de la réponse en utf-8. Certains caractères spéciaux comme-ou ç ne sont pas lus correctement. Si je test le serveur avec une page html de l'envoi d'une demande, la chaîne est correcte et l'encodage est UTF-8 sans BOM.
Quelques extraits:
Servlet
response.setContentType ("application/json; charset=UTF-8");
PrintWriter out = response.getWriter ();
out.write (string);
Client
entity = response.getEntity ();
entity.getContentEncoding (); //returns null
resultado = EntityUtils.toString (entity, HTTP.UTF_8); //Some characters are wrong
Quelqu'un a eu le même problème?
RÉSOLU:
Désolé les gars le client et le serveur ont été fonctionne correctement. Je suis de l'écriture d'une application android et il semble que le logcat (où j'ai d'imprimer les messages) ne prend pas en charge le codage utf-8.
OriginalL'auteur Gabriel Llamas | 2010-12-14
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé
au lieu de définir l'encodage via
setContentType
? Il ne devrait pas faire une différence en fonction de la documentation, mais qui sait...Aussi, assurez-vous de ne pas appeler
response.getWriter()
n'importe où dans votre code avant de définir le codage des caractères, parce que ce dernier n'aurait aucun effet dans ce cas.Pouvez-vous identifier si le problème est sur la servlet côté ou sur le côté client?
Ouais, vous devriez vérifier avec quelque chose comme Wireshark.
J'ai aussi testé la connexion avec wireshark et j'ai vu que les caractères spéciaux sont envoyés de manière incorrecte, mais firefox affiche correctement :S. Testé avec setCharacterEncoding et text/plain contenu-type, mais ne fonctionne toujours pas.
Vous avez raison, il n'y a pas de différences en ajoutant ou en n'ajoutant pas de réponse.setCharacterEncoding("utf-8") après le réglage de contentType avec le jeu de caractères de l'information. Mais quand j'ai changé la position de l'appel de réponse.getWriter() immédiatement travaillé parfaite. Merci beaucoup.
OriginalL'auteur Thomas
Assurez-vous de flux d'octets en UTF-8 format:
OriginalL'auteur mohammed irfan tirupattur
StandardCharsets.UTF_8 peut être utilisé avec EntityUtil pour obtenir le bon encodage.
Voici un extrait d'exemple:
OriginalL'auteur Jin