Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

Como codificar URL JSON para una cadena de consulta

Publicado 2 min de lectura Por Akash Kinkar Pandey

Una URL no puede llevar un documento JSON tal como esta. Llaves, comillas, espacios y todo por encima de ASCII todo tiene que ser codificado por centesimas antes de poder ir a una cadena de consulta o un segmento de ruta.

Usando el codificador y decodificador de URL de JSON

Elige Codificar o Decodificar, pega tu documento, y presiona Convertir. Codificar sigue la misma regla que encodeURIComponent: cada byte UTF-8 fuera de un pequeno conjunto seguro se convierte en un escape %XX.

{"q":"a b+c","clef":"𝄞"}

se codifica como %7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D, coincidiendo exactamente con lo que encodeURIComponent produce para el mismo documento, incluyendo el simbolo musical 𝄞 como cuatro escapes %XX separados, ya que toma cuatro bytes en UTF-8.

La unica opcion, y por que existe

Activar “Espacio es un signo de mas” y el mismo documento codifica el espacio como + en lugar de %20, mientras que el + literal en los datos se convierte en %2B. Esa distincion es toda la razon por la que esto es un interruptor en lugar de una suposicion: la cadena de consulta de una URL y un envio de formulario no estan de acuerdo sobre que significa un + solo. En el cuerpo de un formulario, + significa un espacio. En todas las demas partes de una URL, + es un signo de mas literal. Adivinar mal convierte cada mas en tus datos en un espacio, o deja cada espacio codificado como un signo de mas literal, que es una de las formas mas comunes en que un documento codificado llega silenciosamente corrompido al otro lado.

Decodificacion, y por que ocurre en un solo paso

La decodificacion recopila cada byte escapado por centesimas en toda la cadena y los decodifica como UTF-8 una vez, al final, en lugar de un escape a la vez. Un caracter multibyte como un emoji llega como varios escapes %XX separados en secuencia, por lo que decodificar cada uno individualmente y tratarlo como su propio caracter convertiria un emoji en varios caracteres de reemplazo. Decodificar una vez al final es lo que mantiene intacto el texto multibyte, y tambien permite que bytes que no son UTF-8 valido se reporten como su propio tipo de fallo, distinto de un signo de porcentajes sin digitos hexadecimales validos despues de el, que decodeURIComponent no puede distinguir por si solo.

Viaje de ida y vuelta

Codificar el ejemplo anterior con “Espacio es un signo de mas” activado y luego decodificarlo de vuelta devuelve el documento original exacto, "a b+c" y el simbolo musical ambos intactos, que es la verdadera prueba de que el manejo de mas y espacios esta de acuerdo en ambas direcciones.

Volver a todas las entradas