java.io.filenotfoundException عند استرجاع عنوان URL مع Umlauts في اسم الملف
-
12-09-2019 - |
سؤال
أحاول استرداد عنوان URL مع Umlaut في اسم الملف، شيء مثل "http://somesimpledomain.com/some/path/überfile.txt."، لكن هذا يعطيني java.io.filenotfoundexception. أظن أن اسم الملف على الخادم البعيد يتم ترميزه في Latin1، على الرغم من أن عنوان URL الخاص بي موجود في UTF8. لكن محاولتي لتغيير ترميز عنوان URL لم ينجح وأنا لا أعرف كيفية تصحيح ذلك. الرجاء المساعدة!
الرمز هو كما يلي:
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) {
}
التحيات، هندريك
المحلول
يحتاج عنوان URL إلى ترميزه بشكل صحيح. عليك أن تعرف ما الذي يتوقعه Charset / ترميز الخادم الخاص بك. يمكنك تجربة هذا أولا،
String uri = "http://somesimpledomain.com/some/path/" +
URLEncoder.encode(filename, "ISO-8859-1");
إذا لم ينجح ذلك، فاستبدل "ISO-8859-1" مع "UTF-8" وحاول مرة أخرى.
إذا لم يعمل ذلك أيضا، فلا يوجد ملف :)
نصائح أخرى
هل حاولت urlencoding ذلك؟ على سبيل المثال
%FCberfile
لا تنتمي إلى StackOverflow