Estoy tratando de analizar el siguiente URI: http://translate.google.com/#zh-CN|en|你Cómo analizar un URI como esta en Java
pero obtenido este mensaje de error:
java.net.URISyntaxException: Illegal character in fragment at index 34: http://translate.google.com/#zh-CN|en|你
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parse(URI.java:3028)
Se trata de tener un problema con el "|" personaje, si me deshago del "|", el último char chino no está causando ningún problema, ¿cuál es la forma correcta de manejar esto?
Mi aspecto método como este:
public static void displayFileOrUrlInBrowser(String File_Or_Url)
{
try { Desktop.getDesktop().browse(new URI(File_Or_Url.replace(" ","%20").replace("^","%5E"))); }
catch (Exception e) { e.printStackTrace(); }
}
Gracias por las respuestas, pero la solución de BalusC parece que funciona sólo para una instancia de la url, mi método necesita trabajar con cualquier URL que pase a ella, cómo ¿Sabría dónde está el punto de partida para cortar la url en dos partes y solo codificar la segunda parte?
FYI: 'URLEncoder' (a pesar del nombre) no se debe utilizar para codificar URL. El documento dice: _Esta clase contiene métodos estáticos para convertir un String a la aplicación/x-www-form-urlencoded formato MIME._ Esto no es lo mismo que la codificación utilizada por URIs/URLs. – McDowell
La solución de BalusC parece funcionar para esta instancia de la url, pero necesito que el método funcione para todas las URL que paso a él, ¿cómo sabría desde qué punto de partida analizar el resto de la URL? La url podría cualquier de los siguientes: www.yahoo.com/abc/xyz http://yahoo.com/abc/123/ yahoo.com/abc/123/... – Frank
I cree que debería dividir la URL en pedazos ... dominio, ruta, cadena de consulta y fragmento. El dominio no debe ser codificado. El camino, tendrías que dividir por barras, y codificar cada parte del camino, luego volver a unirlo. Para la cadena de consulta, necesitarás codificar el nombre y el valor de cada parámetro. También deberías codificar el fragmento. Luego, vuelve a armar la URL. –