Em Java, quero converter isso:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
Para isso:
https://mywebsite/docs/english/site/mybook.do&request_type
Isto é o que eu tenho até agora:
class StringUTF
{
public static void main(String[] args)
{
try{
String url =
"https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
"%3Frequest_type%3D%26type%3Dprivate";
System.out.println(url+"Hello World!------->" +
new String(url.getBytes("UTF-8"),"ASCII"));
}
catch(Exception E){
}
}
}
Mas isso não funciona direito. O que são estes %3A
e %2F
formatos de chamada e como faço para convertê-los?
java
url-encoding
crackerplace
fonte
fonte
url
string são ASCII, e isso também ocorre depois que a string foi decodificada em URL.'%'
é um caractere ASCII e%xx
representa um caractere ASCII sexx
for menor que (hexadecimal)80
.Respostas:
Isso não tem nada a ver com codificações de caracteres como UTF-8 ou ASCII. A string que você possui é codificada em URL . Esse tipo de codificação é algo completamente diferente da codificação de caracteres.
Tente algo como isto:
O Java 10 adicionou suporte direto
Charset
à API, o que significa que não há necessidade de capturar UnsupportedEncodingException:Observe que uma codificação de caracteres (como UTF-8 ou ASCII) é o que determina o mapeamento de caracteres para bytes brutos. Para uma boa introdução às codificações de caracteres, consulte este artigo .
fonte
URLDecoder
são estáticos, assim você não precisa criar uma nova instância."UTF-8"
) é preterida de acordo com a documentação da API do Java 7. Use a versão com dois parâmetros.StandardCharsets.UTF_8.name()
a partir deste pacote:java.nio.charset.StandardCharsets
. Relevante para isso: linkA string que você tem está na
application/x-www-form-urlencoded
codificação.Use URLDecoder para convertê-lo em Java String.
fonte
Isso já foi respondido antes (embora essa pergunta tenha sido a primeira!):
Conforme a documentação da classe URL :
Basicamente:
Darei à você:
fonte
URLDecoder.decode(String, String)
sobrecarga não é preterida. Você deve estar se referindo àURLDecoder.decode(String)
sobrecarga sem a codificação. Convém atualizar sua postagem para esclarecimentos.@deprecated The resulting string may vary depending on the platform's default encoding. Instead, use the decode(String,String) method to specify the encoding.
https%3A%2F...
) como apenas o caminho de um URI; não há autoridade ou consulta, etc. Isso pode ser testado chamando os respectivos métodos get no objeto URI. Se você passar o texto decodificado para o construtor URI:, anew URI("https://mywebsite/do.....")
chamadagetPath()
e outros métodos fornecerão os resultados corretos.%3A
e%2F
são caracteres codificados em URL. Use esse código java para convertê-los novamente em:
e/
fonte
fonte
fonte
Eu uso apache commons
O conjunto de caracteres padrão é
UTF-8
fonte
Você pode selecionar seu método com sabedoria :)
fonte
Usando a classe java.net.URI:
Observe que o tratamento de exceções pode ser melhor, mas não é muito relevante para este exemplo.
fonte