Jeu de caractères Android par défaut lors de l'envoi d'un message http / put - Problèmes avec des caractères spéciaux
J'ai configuré apache httpClient:
HttpProtocolParams.setContentCharset(httpParameters, "UTF-8");
HttpProtocolParams.setHttpElementCharset(httpParameters, "UTF-8");
J'ai aussi inclure l'en-tête http "Content-Type: application/json; charset=UTF-8" pour tous http post et mettre la demande.
Je suis en train d'envoyer http post/put demandes avec un json corps qui contient des caractères spéciaux (ie. les caractères chinois via Google Pinyin clavier, symboles, etc.) Les personnages apparaissent comme n'importe quoi dans les journaux, mais je pense que c'est parce que DDMS ne supporte pas l'UTF-8, comme décrit dans cette question.
Le problème, c'est quand le serveur reçoit la requête, il n'a parfois pas de voir les personnages (en particulier les caractères Chinois), ou il devient inutile poubelle lorsque nous les récupérer via une requête GET.
J'ai aussi essayé de mettre 250 caractères non-ascii dans un seul domaine, parce que ce domaine particulier, doit être en mesure de prendre jusqu'à 250 caractères. Cependant, il ne parvient pas à valider sur le côté serveur qui prétend que les 250 limite de caractères a été dépassé. 250 caractères ASCII fonctionnent tout aussi bien.
Le serveur mecs prétendent qu'ils ont le soutien de l'UTF-8. Ils ont même essayé de simuler une requête post qui contient des caractères Chinois, et les données ont été reçues par le serveur de l'amende juste. Toutefois, le mec (un Chinois) est à l'aide d'un ordinateur Windows avec le pack de langue Chinoise installé (je pense, car il ne peut saisir les caractères Chinois sur son clavier).
Je suppose que le jeu de caractères utilisé par le client Android et le serveur (fait par des gars Chinois d'ailleurs) ne sont pas alignés. Mais je ne sais pas qui est en faute depuis le serveur mecs prétendent qu'ils ont le soutien de l'UTF-8, et reste notre client est configuré pour prendre en charge UTF-8.
Cela m'a demandé sur quel charset Android utilise par défaut sur l'ensemble de la saisie de texte, et si il peut être changé pour un autre par programmation. J'ai essayé de trouver des ressources sur comment faire cela sur l'entrée des widgets, mais je n'ai pas trouve quelque chose d'utile.
Est-il un moyen de définir le jeu de caractères pour la saisie de tous les widgets sur Android? Ou peut-être que j'ai raté quelque chose dans le reste de configuration du client? Ou peut-être, juste peut-être, le serveur mecs ne sont pas en UTF-8, à leurs serveurs et utilisé Windows les jeux de caractères à la place?
source d'informationauteur avendael
Vous devez vous connecter pour publier un commentaire.
Apparemment, j'ai oublié de définir le StringEntity du jeu de caractères UTF-8. Ces lignes a fait le tour:
Donc, il y a au moins deux niveaux pour définir le jeu de caractères dans l'Android client lors de l'envoi d'un http post avec des caractères non-ascii.
Mise à JOUR: Comme Samuel l'a souligné dans les commentaires, le moderne façon de le faire est d'utiliser un ContentType, comme suit:
Je sais que ce post est un peu vieux mais néanmoins voici une solution:
Voici mon code pour l'affichage des chaînes UTF-8 (ce n'est pas grave si ils sont xml soap ou json) à un serveur. Je l'ai essayé avec l'alphabet cyrillique, les valeurs de hachage et quelques autres caractères spéciaux et il fonctionne comme un charme. C'est une compilation de nombreuses solutions que j'ai trouvé dans les forums.
J'espère que quelqu'un va trouver ce code utile. 🙂
Vous devez définir charset de votre chaîne de caractères l'entité de l'UTF-8:
Vous pouvez éliminer le serveur que le problème à l'aide de
curl
à envoyer les mêmes données.Si cela fonctionne avec
curl
utilisation--trace
pour vérifier la sortie.De vous assurer de l'envoi du contenu du corps comme des octets. Comparer la requête HTTP à partir d'Android avec la sortie de la réussite de la
curl
demande.