325 votes

Que signifie réellement "Content-type : application/json ; charset=utf-8" ?

Lorsque je fais une demande POST avec un corps JSON à mon service REST, j'inclus Content-type: application/json; charset=utf-8 dans l'en-tête du message. Sans cet en-tête, je reçois une erreur du service. Je peux également utiliser avec succès Content-type: application/json sans le ;charset=utf-8 portion.

Que fait exactement charset=utf-8 faire ? Je sais qu'il spécifie le codage des caractères, mais le service fonctionne bien sans cela. Cet encodage limite-t-il les caractères qui peuvent figurer dans le corps du message ?

5 votes

Jeter un coup d'œil à hanselman.com/blog/

11 votes

De manière intrigante, selon L'IANA application/json Enregistrement du type de média il ne semble pas qu'il y ait un support charset bien qu'il soit souvent fourni dans la pratique.

1 votes

I know it specifies the character encoding but the service works fine without it. "fonctionner" ne signifie pas toujours "le code/la configuration existant(e) est la manière la plus correcte, couvrant tous les cas de figure, de faire une chose". Cela dépend de toutes les conventions et hypothèses qui peuvent ne pas fonctionner dans d'autres circonstances. Personnellement, j'essaie toujours d'être aussi explicite que possible.

0voto

Tri Nguyen Points 1

J'utilisais HttpClient et je recevais un en-tête de réponse avec un content-type de application/json j'ai perdu les caractères tels que les langues étrangères ou les symboles qui utilisaient l'unicode puisque HttpClient est par défaut en mode ISO-8859-1 . Donc, soyez aussi explicite que possible comme mentionné par @WesternGun pour éviter tout problème éventuel.

Il n'y a aucun moyen de gérer cela car le serveur ne gère pas le charset des en-têtes demandés ( method.setRequestHeader("accept-charset", "UTF-8"); ) pour moi et j'ai dû récupérer les données de la réponse sous forme de draw bytes et les convertir en String en utilisant UTF-8. Il est donc recommandé d'être explicite et d'éviter de supposer une valeur par défaut.

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