En Java, quiero convertir esto:
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type
A esto:
https://mywebsite/docs/english/site/mybook.do&request_type
Esto es lo que tengo hasta ahora:
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){
}
}
}
Pero no funciona bien. ¿Cómo se llaman estos %3A
y %2F
formatos y cómo los convierto?
java
url-encoding
crackerplace
fuente
fuente
url
cadena son ASCII, y esto también es cierto después de que la cadena ha sido decodificada por URL.'%'
es un carácter ASCII y%xx
representa un carácter ASCII sixx
es menor que (hexadecimal)80
.Respuestas:
Esto no tiene nada que ver con codificaciones de caracteres como UTF-8 o ASCII. La cadena que tiene allí está codificada en URL . Este tipo de codificación es algo completamente diferente a la codificación de caracteres.
Intenta algo como esto:
Java 10 agregó soporte directo para
Charset
la API, lo que significa que no hay necesidad de detectar UnsupportedEncodingException:Tenga en cuenta que una codificación de caracteres (como UTF-8 o ASCII) es lo que determina la asignación de caracteres a bytes sin formato. Para una buena introducción a las codificaciones de caracteres, vea este artículo .
fuente
URLDecoder
son estáticos, por lo que no tiene que crear una nueva instancia."UTF-8"
) está en desuso según la documentación de la API de Java 7. Use la versión con dos parámetros.StandardCharsets.UTF_8.name()
de este paquete:java.nio.charset.StandardCharsets
. Relevante para esto: enlaceLa cadena que tienes está en la
application/x-www-form-urlencoded
codificación.Use URLDecoder para convertirlo a Java String.
fuente
Esto ha sido respondido antes (¡aunque esta pregunta fue la primera!):
Como dice la documentación de la clase de URL :
Básicamente:
Te regalaré:
fuente
URLDecoder.decode(String, String)
sobrecarga no está en desuso. Debe referirse a laURLDecoder.decode(String)
sobrecarga sin la codificación. Es posible que desee actualizar su publicación para aclararla.@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 solo la ruta de un URI; no hay autoridad, consulta, etc. Esto se puede probar llamando a los respectivos métodos get en el objeto URI. Si pasa el texto decodificado al constructor de URI:,new URI("https://mywebsite/do.....")
entonces llamargetPath()
y otros métodos darán resultados correctos.%3A
y%2F
son caracteres codificados en URL. Use este código Java para convertirlos nuevamente en:
y/
fuente
fuente
fuente
Yo uso apache commons
El juego de caracteres predeterminado es
UTF-8
fuente
Puede seleccionar su método sabiamente :)
fuente
Usando la clase java.net.URI:
Tenga en cuenta que el manejo de excepciones puede ser mejor, pero no es muy relevante para este ejemplo.
fuente