Pourquoi volley réponse de la chaîne de l'utilisation d'un encodage différent de celui dans les en-têtes de réponse?
Quand on fait une reprise de volée demande (StringRequest
ou JsonObjectRequest
), à l'aide de la OkHttp pile, la réponse de la chaîne de codage est défini à la norme ISO-8995-1, qui est le codage par défaut. La réponse a un en-tête: content-type=text/html; charset=utf-8
, qui doivent être détectés. Pourquoi n'est-il pas?
Vous devez vous connecter pour publier un commentaire.
Ces deux types de demande d'appel
HttpHeaderParser.parseCharset
, qui est capable de déterminer le jeu de caractères à partir des en-têtes. Cependant, elle exige que l'en-tête êtreContent-Type
, pascontent-type
: il est sensible à la casse. (Je ne suis pas sûr du comportement si vous utilisez la valeur par défaut HurlStack, il est possible que cela est un détail d'implémentation de différence avec le OkHttp de la pile.)Solution 1: copie de la demande d'origine, mais remplacer manuellement le jeu de caractères
Solution 2: copie de la demande d'origine, mais la force de l'en-tête attendu pour exister
D'abord merci beaucoup @mjibson pour les 2 solutions que vous avez posté ici, j'ai eu un problème similaire, dans mon cas, le type de contenu est toujours manquant n'a donc le suivant:
je voulais juste partager ce que pour les autres à un problème similaire. il est aussi important de lire les parseCharset méthode dans https://android.googlesource.com/platform/frameworks/volley/+/master/src/com/android/volley/toolbox/HttpHeaderParser.java à comprendre pourquoi cela fonctionne
Remplacer la Méthode
parseNetworkResponse
de laRequest<T>
Classe.Vous pouvez le faire comme ceci:
Modifier la Méthode de OBTENIR de POSTER pour de l'UTF-8 soutien
. . . .
Merci @Simon Heinen. En fonction de votre réponse, j'ai écrit une fonction.
Utilisation:
En outre, remplacer getParamsEncoding() fonctionne également.