63 votes

CODAGE DE CARACTERES

Mon application web Java soumet une requête AJAX qui renvoie du JSON tel:

{'value': 'aériennes'}

Lorsque "aériennes" s'affiche dans la page web, il apparaît comme "un�riennes', donc je pense qu'il y a une sorte de problème d'encodage des caractères. L'AJAX en-têtes de réponse comprennent

Content-Type    application/json

ce qui ne semble pas inclure tout jeu de caractères de l'information. Je suppose que ce doit être changé pour quelque chose comme

Content-Type    text/html; charset=iso-8859-1      (or charset=utf8)

Le côté serveur de l'application est Spring MVC, et je suppose qu'il doit y avoir un moyen de définir le jeu de caractères par défaut pour chaque réponse?

Merci, N'

63voto

BalusC Points 498232

Les symptômes indiquent que la chaîne JSON qui a été à l'origine dans l'encodage UTF-8 a été écrit à la réponse HTTP à l'aide de l'ISO-8859-1 codage et le webbrowser a été chargé de l'afficher en tant que UTF-8. Si il a été écrit en utilisant UTF-8 et affiché comme ISO-8859-1, alors, vous auriez vu aériennes. Si il a été écrit et affiché à l'aide de l'ISO-8859-1, alors, vous auriez vu a�riennes.

Pour résoudre le problème de la chaîne JSON mal écrit comme ISO-8859-1, vous devez configurer votre webapp / Printemps à l'utilisation de l'UTF-8 comme encodage de la réponse HTTP. Fondamentalement, il convient de faire la suite sous les couvertures:

response.setCharacterEncoding("UTF-8");

Ne changez pas votre type de contenu d'en-tête. Il est parfaitement bien pour JSON et il est affiché en tant que UTF-8.

34voto

Lars Juel Jensen Points 389

Je ne sais plus si c'est pertinent, mais je l'ai corrigé avec l'annotation @RequestMapping.

 @RequestMapping(method=RequestMethod.GET, produces={"application/json; charset=UTF-8"})
 

18voto

Thanatos Points 13444

Tout d'abord, votre posté de données n'est pas valide JSON. Ce serait:

{"value": "aériennes"}

Notez les guillemets: Ils sont nécessaires.

Le Type de Contenu pour les données JSON doit être application/json. Le réel des données JSON (ce que nous avons ci-dessus) doivent être encodés en UTF-8, UTF-16 ou UTF-32 - je vous recommande d'utiliser de l'UTF-8.

Vous pouvez utiliser un outil comme Wireshark pour surveiller le trafic réseau et de voir comment les données des regards, vous devriez voir les octets c3 89 pour l'é. Je n'ai jamais travaillé avec le Printemps, mais si c'est faire de l'encodage JSON, c'est probablement prises en charge correctement, pour vous.

Une fois que le JSON atteint le navigateur, il devrait bien, si elle est valide. Cependant, comment êtes-vous d'insérer les données de la réponse JSON dans la page web?

6voto

Jorge Carretero Points 29

Cela me est arrivé exactement la même chose avec ceci:

 <%@ page language="java" contentType="application/json" pageEncoding="UTF-8"%>
 

Mais cela fonctionne pour moi:

 <%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
 

Essayez d'ajouter

  ;charset=UTF-8
 

à votre contentType.

4voto

ton Points 120
response.setContentType("application/json;charset=utf-8");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X