java.io.FileNotFoundException beim Abrufen einer URL mit Umlaute im Dateinamen
-
12-09-2019 - |
Frage
Ich versuche, eine URL mit einem Umlaut in den Dateinamen, so etwas wie " http://somesimpledomain.com/some/path/überfile.txt “, aber es gibt mir ein java.io.FileNotFoundException. Ich vermute, dass der Dateiname auf dem Remote-Server ist in latin1 codiert, wenn meine URL in UTF-8 ist. Aber meine Versuche die Codierung der URL zu ändern, waren nicht erfolgreich, und ich weiß nicht, wie es weiter zu debuggen. Bitte helfen Sie!
-Code ist wie folgt:
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) {
}
Viele Grüße, Hendrik
Lösung
URL werden muss, richtig codiert. Sie müssen wissen, was charset / kodieren Ihren Server erwartet. Sie können dies zuerst versuchen,
String uri = "http://somesimpledomain.com/some/path/" +
URLEncoder.encode(filename, "ISO-8859-1");
Wenn das nicht funktioniert, ersetzen Sie "ISO-8859-1" mit "UTF-8" und versuchen Sie es erneut.
Wenn das auch nicht funktioniert, Datei nicht existiert:)
Andere Tipps
Haben Sie versucht, es urlencoding? Z.B.
%FCberfile