Pular para o conteudo principal
CuteJSON
↑↓ Navegar Enter Selecionar Esc Fechar

Como codificar URL JSON para uma string de consulta

Publicado 2 min de leitura Por Akash Kinkar Pandey

Uma URL nao pode transportar um documento JSON como esta. Chaves, aspas, espacos e tudo acima de ASCII tem que ser codificado em porcentagens antes de poder entrar em uma string de consulta ou segmento de caminho.

Usando o codificador e decodificador de URL de JSON

Escolha Codificar ou Decodificar, cole seu documento, e pressione Converter. A codificacao segue a mesma regra que encodeURIComponent: cada byte UTF-8 fora de um pequeno conjunto seguro se torna um escapamento %XX.

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

codifica para %7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D, correspondendo exatamente ao que encodeURIComponent produz para o mesmo documento, incluindo o simbolo musical 𝄞 como quatro escapamentos %XX separados, ja que ele usa quatro bytes em UTF-8.

A unica opcao, e por que existe

Ative “O espaco e um sinal de mais” e o mesmo documento codifica o espaco como + em vez de %20, enquanto o + literal ja presente nos dados ainda se torna %2B. Essa distincao e toda a razao pela qual isso e um interruptor em vez de uma suposicao: a string de consulta de uma URL e o envio de formulario discordam sobre o que um + solto significa. No corpo de um formulario, + significa um espaco. Em todas as outras partes de uma URL, + e um sinal de mais literal. Errar na suposicao transforma cada mais em seus dados em espaco, ou deixa cada espaco codificado como um sinal de mais literal, que e uma das formas mais comuns pelas quais um documento codificado chega silenciosamente corrompido do outro lado.

A decodificacao, e por que acontece em uma unica passagem

A decodificacao coleta cada byte escapado em porcentagens em toda a string e os decodifica como UTF-8 uma vez, ao final, em vez de um escapamento por vez. Um caractere multi-byte como um emoji chega como varios escapamentos %XX separados em sequencia, entao decodificar cada um individualmente e trata-lo como seu proprio caractere transformaria um emoji em varios caracteres de substituicao. Decodificar uma vez ao final e o que mantem o texto multi-byte intacto, e tambem permite que bytes que nao sao UTF-8 valido sejam reportados como seu proprio tipo de falha, distinto de um sinal de porcentagem sem digitos hexadecimais validos depois, que decodeURIComponent nao consegue distinguir sozinho.

Viagem de ida e volta

Codificar o exemplo acima com “O espaco e um sinal de mais” ativado e depois decodificar de volta retorna o documento original exato, "a b+c" e o simbolo musical ambos intactos, que e o verdadeiro teste de que o tratamento de mais e espaco concordam em ambas as direcoes.

Voltar a todos os posts