En Java, je veux convertir ceci:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
Pour ça:
https://mywebsite/docs/english/site/mybook.do&request_type
Voici ce que j'ai jusqu'à présent:
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){
}
}
}
Mais cela ne fonctionne pas correctement. Quelles sont ces %3A
et %2F
formats appelé et comment puis-je les convertir?
java
url-encoding
crackerplace
la source
la source
url
chaîne sont ASCII, et cela est également vrai une fois la chaîne décodée par URL.'%'
est un caractère ASCII et%xx
représente un caractère ASCII sixx
est inférieur à (hexadécimal)80
.Réponses:
Cela n'a rien à voir avec les encodages de caractères tels que UTF-8 ou ASCII. La chaîne que vous y avez est encodée en URL . Ce type d'encodage est quelque chose de complètement différent de l'encodage de caractères.
Essayez quelque chose comme ceci:
Java 10 a ajouté une prise en charge directe
Charset
de l'API, ce qui signifie qu'il n'est pas nécessaire d'attraper UnsupportedEncodingException:Notez qu'un codage de caractères (tel que UTF-8 ou ASCII) est ce qui détermine le mappage des caractères en octets bruts. Pour une bonne introduction aux encodages de caractères, consultez cet article .
la source
URLDecoder
sont statiques, vous n'avez donc pas à en créer une nouvelle instance."UTF-8"
) est déconseillée selon la documentation de l'API Java 7. Utilisez la version avec deux paramètres.StandardCharsets.UTF_8.name()
partir de ce paquet:java.nio.charset.StandardCharsets
. Pertinent: lienLa chaîne que vous avez est
application/x-www-form-urlencoded
encodée.Utilisez URLDecoder pour le convertir en chaîne Java.
la source
Cela a été répondu avant (bien que cette question était d' abord!):
Comme l' indique la documentation des classes d' URL :
Fondamentalement:
te donnera:
la source
URLDecoder.decode(String, String)
surcharge n'est pas déconseillée. Vous devez faire référence à laURLDecoder.decode(String)
surcharge sans l'encodage. Vous voudrez peut-être mettre à jour votre message pour clarification.@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...
), comme juste le chemin d'un URI; il n'y a pas d'autorité, ni de requête, etc. Cela peut être testé en appelant les méthodes get respectives sur l'objet URI. Si vous passez le texte décodé au constructeur URI:, l'new URI("https://mywebsite/do.....")
appelgetPath()
et d'autres méthodes donneront des résultats corrects.%3A
et%2F
sont des caractères codés URL. Utilisez ce code java pour les reconvertir:
et/
la source
la source
la source
J'utilise apache commons
Le jeu de caractères par défaut est
UTF-8
la source
Vous pouvez sélectionner votre méthode judicieusement :)
la source
Utilisation de la classe java.net.URI:
Veuillez noter que la gestion des exceptions peut être meilleure, mais ce n'est pas très pertinent pour cet exemple.
la source