112 votes

Encodage de caractères JSON - UTF-8 est-il bien pris en charge par les navigateurs ou dois-je utiliser des séquences d'échappement numériques?

Je suis en train d'écrire un webservice qui utilise json pour représenter ses ressources, et je suis un peu coincé de penser à la meilleure façon d'encoder au format json. La lecture du json rfc (http://www.ietf.org/rfc/rfc4627.txtil est clair que la pratique de l'encodage est utf-8. Mais le rfc décrit également l'échappement de la chaîne mécanisme pour spécifier des caractères. Je suppose que ce serait généralement utilisé pour échapper les caractères non-ascii, ce qui rend l'résultant de l'utf-8 valide ascii.

Donc, disons que j'ai une chaîne json qui contient des caractères unicode (code-points) qui sont non-ascii. Mon webservice juste l'encodage utf-8 qui et de le retourner, ou devrait-il échapper à tous ces caractères non-ascii et retour pur ascii?

J'aimerais navigateurs afin d'être en mesure d'exécuter les résultats à l'aide jsonp ou eval. Effet de la décision? Ma connaissance des différents navigateur javascript support pour l'utf-8 est absente.

EDIT: je tiens à préciser que ma principale préoccupation à propos de la façon de coder le résultat est vraiment à propos de navigateur manipulation des résultats. Ce que j'ai lu indique que les navigateurs peuvent être sensibles à l'encodage lors de l'utilisation de JSONP en particulier. Je n'ai pas trouvé de vraiment bonnes infos sur le sujet, donc je vais devoir commencer à faire quelques tests pour voir ce qui se passe. Idéalement, j'aimerais seulement échapper ces quelques personnages qui sont nécessaires et juste utf-8 encoder les résultats.

115voto

thomasrutter Points 42905

Tous conformes JSON analyseurs seront en mesure de gérer correctement l'UTF-8, tout comme le coffre-fort numérique encodages.

La capacité de JSON encodeurs à utiliser le coffre-fort numérique encodages à la place vous offre plus de choix. Une raison pour laquelle vous pouvez choisir le coffre-fort numérique encodages serait si un mécanisme de transport entre l'encodeur et du décodeur ne peut pas faire confiance à proprement transmettre ou stocker de l'UTF-8.

Certains cadres, y compris PHP de mise en œuvre de JSON, toujours faire le coffre-fort numérique encodages sur le codeur côté. C'est prévu pour un maximum de compatibilité avec buggy/limitée des mécanismes de transport et la comme. Toutefois, cela ne devrait pas être interprété comme une indication que JSON décodeurs ont des problèmes avec l'encodage UTF-8.

La capacité à encoder en JSON en ascii-coffre-fort numérique encodages seulement la rend plus souple avec d'autres langages de programmation, les transports et les méthodes de stockage qui peut ne pas être en UTF-8 au courant ou même binaire-fort.

Donc, je suppose que vous ne pouvait tout simplement de se prononcer sur:

  • UTF-8 est plus compact et entièrement pris en charge à la fin décodeur
  • ascii-sûr l'encodage est plus souple si le JSON est stocké ou transmis d'une manière qui ne peuvent pas préserver correctement l'UTF-8

14voto

chaos Points 69029

ASCII n'y est plus. L'utilisation du codage UTF-8 signifie que vous n'utilisez pas le codage ASCII. Ce que vous devriez utiliser le mécanisme d'échappement est ce que dit la RFC:

Tous les caractères Unicode peuvent être placés entre guillemets, à l'exception des caractères qui doivent être omis: guillemets, reverse solidus et les caractères de contrôle (U + 0000 à U + 001F).

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