java.io.FileNotFoundException al recuperar una dirección URL con diéresis en el nombre del archivo
-
12-09-2019 - |
Pregunta
Estoy tratando de recuperar una URL con una diéresis en el nombre del archivo, algo así como " http://somesimpledomain.com/some/path/überfile.txt ", pero me da un java.io.FileNotFoundException. Sospecho que el nombre del archivo en el servidor remoto está codificada en latin1, aunque mi url está en UTF-8. Pero mis intentos para cambiar la codificación de la URL no tuvieron éxito y que no saben cómo depurar aún más. Por favor, ayuda!
Código es el siguiente:
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(uri).openConnection();
conn.setRequestMethod("GET");
} catch (MalformedURLException ex) {}
} catch (IOException ex){}
// Filter headers
int i=1;
String hKey;
while ((hKey = conn.getHeaderFieldKey(i)) != null) {
conn.getHeaderField(i);
i++;
}
// Open the file and output streams
InputStream in = null;
OutputStream out = null;
try {
in = conn.getInputStream();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
out = response.getOutputStream();
} catch (IOException ex) {
}
Saludos, Hendrik
Solución
URL necesita ser codificado correctamente. Usted tiene que saber qué juego de caracteres / codificación de su servidor está a la espera. Puede probar este primero,
String uri = "http://somesimpledomain.com/some/path/" +
URLEncoder.encode(filename, "ISO-8859-1");
Si eso no funciona, reemplace "ISO-8859-1" con "UTF-8" y vuelve a intentarlo.
Si eso no funciona bien, el archivo no existe:)
Otros consejos
¿Ha tratado URLEncoding ella? P.ej.
%FCberfile