2010-12-14 92 views
3

J'ai une servlet qui envoie une chaîne avec un encodage utf-8. J'ai aussi un client écrit avec la bibliothèque apache httpcomponents.Problème de codage UTF-8 avec servlet et apache HttpClient

Mon problème est la lecture de la réponse dans utf-8. Certains caractères spéciaux comme ñ ou ç ne sont pas lus correctement. Si je teste le serveur avec une page html envoyant une requête, la chaîne est correcte et l'encodage est UTF-8 sans nomenclature.

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 at-il eu le même problème?

Résolu: Désolé les gars le client et le serveur fonctionnaient correctement. J'écris une application Android et il semble que le logcat (où j'imprime les messages) ne supporte pas l'encodage utf-8.

Répondre

7

Avez-vous essayé

response.setCharacterEncoding("utf-8"); 

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 que vous n'avez pas appelé response.getWriter() nulle part dans votre code avant de définir le codage de caractères, parce que ce dernier aurait pas d'effet dans ce cas.

+0

Oui :(

+1

Pouvez-vous identifier si le problème est du côté de servlet ou sur le côté client – Thomas

+1

Ouais vous devriez vérifier avec quelque chose comme Wireshark. – Hiro2k

3

Faire octets de flux sont au format sûr UTF-8:

out.write((yourstring.getBytes("UTF-8")); 
0

StandardCharsets.UTF_8 peut être utilisé avec EntityUtil pour obtenir le bon codage.

Voici un extrait de l'échantillon:

HttpEntity entity = response.getEntity(); 
String webpage = EntityUtils.toString(entity, StandardCharsets.UTF_8);