Réponses de l'encodage avec HttpClient 3.1
Je suis en utilisant org.apache.commons.httpclient.HttpClient
et la nécessité de l'installation de la réponse de l'encodage (pour une raison quelconque serveur renvoie codage incorrect dans le Type de Contenu). Mon chemin est d'obtenir la réponse que les matières premières octets et le convertir en String
avec l'encodage désiré. Je me demandais si il ya une meilleure façon de le faire (par exemple. le programme d'installation HttpClient). Merci pour les suggestions.
OriginalL'auteur michal.kreuzman | 2011-02-28
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il y a une meilleure réponse à l'aide de
HttpClient
3.x Api.Le HTTP 1.1 spécification dit clairement qu'un client "doit" respecter le jeu de caractères spécifié dans l'en-tête de réponse, et d'utiliser ISO-8859-1 si aucun jeu de caractères est spécifié. Le
HttpClient
Api sont conçu sur l'hypothèse que le programmeur veut se conformer à l'adresse HTTP specs. De toute évidence, vous avez besoin de briser les règles dans la spec, de sorte que vous pouvez parler à la non-conformité du serveur. Ne résistant pas, ce n'est pas un cas d'utilisation de l'API de créateurs ont vu la nécessité de soutenir explicitement.Si vous étiez à l'aide de la
HttpClient
4.x, vous pouvez écrire votre propreResponseHandler
pour convertir le corps dans uneHttpEntity
, en ignorant le message de réponse théorique de jeu de caractères.OriginalL'auteur Stephen C
Quelques remarques:
Serveur sert de données, donc, c'est au serveur de servir dans un format approprié. Donc, la réponse de l'encodage est défini par le serveur, pas le client. Toutefois, le client pourrait suggérer au serveur quel format elle aimerait via Accepter et Accept-Charset:
Cependant, les serveurs http habitude de ne pas convertir entre les formats.
Si l'option 1. ne fonctionne pas, alors vous devriez regarder la configuration du serveur.
Lorsque la Chaîne est envoyée comme raw octets (et elle l'est toujours, parce que c'est ce que les réseaux de transmission), il y a toujours de l'encodage défini. Depuis server produit cette matière première en octets, il définit l'encodage. Donc, vous ne pouvez pas prendre octets brutes et de l'utilisation de l'encodage de votre choix pour créer une Chaîne de caractères. Vous devez utiliser le codage qui a été utilisé lors de la conversion de Chaîne d'octets.
HttpClient.getResponseBodyAsString()
prend le codage de Contenu-Type d'attribut dans les en-têtes de réponse). J'ai essayé l'installation Accepter et Accept-Charset comme vous le mentionnez en-têtes de la requête, mais il ne m'aide pas. Obiviously c'est quelque chose de mal sur le serveur mais je ne suis pas propriétaire, donc je ne peut pas faire de modifications sur elle.Alors que vous êtes hors de la chance..
+1 pour le grand commentaire 😀
Thx ;). De toute façon, pourquoi êtes-vous dérangé par le codage de caractères? En java, vous pouvez prendre octets brutes avec n'importe quel encodage et de produire une Chaîne.
Je n'aime pas la façon de briser l'API de règles, donc je veux savoir les possibilités.
OriginalL'auteur Peter Knego
Avertissement: je ne suis pas vraiment savoir HttpClient, seule la lecture de l'API.
Je voudrais utiliser la méthode execute de retourner un HttpResponse, puis
.getEntity().getContent()
. C'est un pur flux d'octets, donc si vous voulez ignorer le codage dit par le serveur, vous pouvez simplement envelopper votre propre InputStreamReader autour d'elle.Bon, on dirait, j'ai eu la mauvaise version (évidemment, il y a trop de
HttpClient
classes).Mais même comme avant, seulement situé sur les autres classes: la
HttpMethod
a ungetResponseBodyAsStream()
méthode, autour de laquelle vous pouvez maintenant envelopper votre propre InputStreamReader. (Ou l'ensemble de la baie à la fois, si il n'est pas trop grand, et la convertir en Chaîne de caractères, comme vous l'avez écrit.)Je pense que d'essayer de changer la réponse et de laisser le HttpClient analyser, il n'est pas de la bonne façon ici.
Je suggère l'envoi d'un message à l'administrateur du serveur/webmaster sur le mauvais jeu de caractères, si.
OriginalL'auteur Paŭlo Ebermann
Salutations les gens,
Jus au cas où quelqu'un trouve ce post googler pour la mise HttpClient pour écrire en UTF-8.
Cette ligne de code doit être à portée de main...
Meilleur
response
est.Salutations, Merci! Je pense que je devrais être assez pour dire HttpServletResponse response
Salut, je suis en utilisant Apache HttpClient pour télécharger les données. Je ne travaille pas avec
Servlet
donc il n'y a pas deHttpServletResponse
.OriginalL'auteur HommeDeJava