J'écris un webservice qui utilise json pour représenter ses ressources, et je suis un peu coincé en réfléchissant à la meilleure façon d'encoder le json. En lisant le json rfc ( http://www.ietf.org/rfc/rfc4627.txt ), il est clair que l'encodage préféré est utf-8. Mais le rfc décrit également un mécanisme d'échappement de chaîne pour spécifier des caractères. Je suppose que cela serait généralement utilisé pour échapper aux caractères non-ascii, rendant ainsi le résultat utf-8 ascii valide.
Disons que j'ai une chaîne json qui contient des caractères unicode (points de code) qui ne sont pas ascii. Mon service Web devrait-il simplement encoder cela en utf-8 et le renvoyer, ou devrait-il échapper à tous ces caractères non-ascii et renvoyer de l'ascii pur?
J'aimerais que les navigateurs puissent exécuter les résultats en utilisant jsonp ou eval. Cela affecte-t-il la décision? Ma connaissance du support javascript de divers navigateurs pour utf-8 fait défaut.
EDIT: Je voulais préciser que ma principale préoccupation concernant la façon d'encoder les résultats concerne vraiment la gestion des résultats par le navigateur. Ce que j'ai lu indique que les navigateurs peuvent être sensibles au codage lors de l'utilisation de JSONP en particulier. Je n'ai pas trouvé de très bonnes informations sur le sujet, je vais donc devoir commencer à faire des tests pour voir ce qui se passe. Idéalement, je voudrais n'échapper que les quelques caractères requis et simplement utf-8 encoder les résultats.
la source
J'ai eu un problème là-bas. Quand je JSON encode une chaîne avec un caractère comme "é", tous les navigateurs renverront le même "é", sauf IE qui retournera "\ u00e9".
Puis avec PHP json_decode (), il échouera s'il trouve "é", donc pour Firefox, Opera, Safari et Chrome, je dois appeler utf8_encode () avant json_decode ().
Remarque: avec mes tests, IE et Firefox utilisent leur objet JSON natif, d'autres navigateurs utilisent json2.js.
la source
utf8_encode()
, php.net/manual/en/function.utf8-encode.phpL'ASCII n'en fait plus partie. L'utilisation du codage UTF-8 signifie que vous n'utilisez pas le codage ASCII. Ce que vous devez utiliser le mécanisme d'échappement est ce que dit la RFC:
la source
J'étais confronté au même problème. Ça marche pour moi. S'il te plaît, vérifie cela.
json_encode($array,JSON_UNESCAPED_UNICODE);
la source
Pour info, la RFC 4627 n'est plus la spécification JSON officielle. Il a été obsolète en 2014 par RFC 7159 , qui a ensuite été obsolète en 2017 par RFC 8259 , qui est la spécification actuelle.
La RFC 8259 déclare:
la source
J'ai eu un problème similaire avec é char ... Je pense que le commentaire "il est possible que le texte que vous alimentez ne soit pas UTF-8" est probablement proche de la marque ici. J'ai le sentiment que le classement par défaut dans mon instance était autre chose jusqu'à ce que je réalise et change en utf8 ... le problème est que les données étaient déjà là, donc je ne sais pas si elles ont converti les données ou non lorsque je les ai modifiées, s'affiche bien dans mysql Table de travail. Le résultat final est que php ne codera pas json les données, mais renvoie simplement false. Peu importe le navigateur que vous utilisez comme serveur à l'origine de mon problème, php n'analysera pas les données vers utf8 si ce caractère est présent. Comme je le dis, je ne sais pas si cela est dû à la conversion du schéma en utf8 après la présence de données ou juste un bogue php. Dans ce cas, utilisez
json_encode(utf8_encode($string));
la source