java.io.FileNotFoundException when retrieving a url with umlauts in the filename

試著忘記壹切 提交于 2019-12-10 12:05:19

问题


I am trying to retrieve a url with an umlaut in the filename, something like "http://somesimpledomain.com/some/path/überfile.txt", but it gives me a java.io.FileNotFoundException. I suspect that the filename on the remote server is encoded in latin1, though my url is in utf8. But my tries to change the encoding of the url weren't successful and I don't know how to debug it further. Please help!

Code is as follows:

   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) {
}

Regards, Hendrik


回答1:


URL needs to be properly encoded. You have to know what charset/encoding your server is expecting. You can try this first,

 String uri = "http://somesimpledomain.com/some/path/" + 
     URLEncoder.encode(filename, "ISO-8859-1");

If that doesn't work, replace "ISO-8859-1" with "UTF-8" and try again.

If that doesn't work either, file doesn't exist :)




回答2:


Have you tried urlencoding it? E.g.

%FCberfile


来源:https://stackoverflow.com/questions/1455369/java-io-filenotfoundexception-when-retrieving-a-url-with-umlauts-in-the-filename

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!