Une URL ne peut pas transporter un document JSON en l’état. Les accolades, les guillemets, les espaces et tout au-delà d’ASCII doivent être encodés en pourcents avant de pouvoir aller dans une requête ou un segment de chemin.
Utilisation de l’encodeur et décodeur URL JSON
Choisissez Encoder ou Decoder, collez votre document, et appuyez Convertir.
L’encodage suit la même règle que encodeURIComponent : chaque octet UTF-8
en dehors d’un petit ensemble devient un échappement %XX.
{"q":"a b+c","clef":"𝄞"}
s’encode en %7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D,
correspondant exactement à ce que URIComponent produit pour le même
document, y compris le symbole musical 𝄞 sous la forme de quatre
échappements %XX séparés, car il prend quatre octets en UTF-8.
L’option unique, et pourquoi elle existe
Activez “L’espace est un signe plus” et le même document encode l’espace
comme + au lieu de %20, tandis que le + littéral déjà présent dans
les données devient toujours %2B. Cette distinction est la seule raison
pour laquelle c’est un bouton plutôt qu’une hypothèse : la requête d’une
URL et l’envoi de formulaire ne sont pas d’accord sur ce que signifie
un + nu. Dans le corps d’un formulaire, + signifie un espace. Dans
toutes les autres parties d’une URL, + est un signe plus littéral. Deviner
à tort transforme chaque plus en vos données en espace, ou laisse chaque
espace encodé comme un signe plus littéral, ce qui est l’un des moyens les
plus courants par lesquels un document encodé arrive corrompu de l’autre
côté.
Le décodage, et pourquoi il se fait en une seule passe
Le décodage recueille chaque octet échappé en pourcents dans toute la
chaîne et les décode en UTF-8 une seule fois, à la fin, plutôt qu’un
échappement à la fois. Un caractère multi-octets comme un emoji arrive
comme plusieurs échappements %XX séparés en séquence, donc décoder
chacun individuellement et le traiter comme son propre caractère
transformerait un emoji en plusieurs caractères de remplacement. Décoder
une seule fois à la fin est ce qui garde le texte multi-octets intact,
et cela permet également que les octets qui ne sont pas du UTF-8 valide
soient signalés comme leur propre type d’échec, distinct d’un signe
pour-cent sans chiffres hexadécimaux valides après, que
decodeURIComponent ne peut pas distinguer de lui seul.
Voyage retour
Encoder l’exemple ci-dessus avec “L’espace est un signe plus” activé
puis le décoder retourne le document exact original, "a b+c" et le
symbole musical tous intacts, ce qui est le vrai test que la gestion
du plus et de l’espace est cohérente dans les deux sens.