java.io.FileNotFoundException ao recuperar uma url com tremas no nome do arquivo
-
12-09-2019 - |
Pergunta
Eu estou tentando recuperar uma url com um trema no nome do arquivo, algo como " http://somesimpledomain.com/some/path/überfile.txt ", mas dá-me um java.io.FileNotFoundException. Eu suspeito que o nome do arquivo no servidor remoto é codificado em latin1, embora meu url está em utf8. Mas minhas tentativas de alterar a codificação do url não foram bem sucedidas e eu não sei como depurar-lo ainda mais. Por favor, ajuda!
código é a seguinte:
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) {
}
Saudações, Hendrik
Solução
URL precisa ser devidamente codificado. Você tem que saber o charset / codificação seu servidor está esperando. Você pode tentar isso em primeiro lugar,
String uri = "http://somesimpledomain.com/some/path/" +
URLEncoder.encode(filename, "ISO-8859-1");
Se isso não funcionar, substitua "ISO-8859-1" com "UTF-8" e tente novamente.
Se isso não funcionar, arquivo não existe:)
Outras dicas
Você já tentou URLEncoding isso? Por exemplo.
%FCberfile