代码之家  ›  专栏  ›  技术社区  ›  Falmarri

文件未找到,除非获取带有重音Java的URL资源

  •  1
  • Falmarri  · 技术社区  · 14 年前

    我在尝试下载文件时遇到了FileNotFoundException http://tfob.azstarnet.com/images/authors/Alcal%C3%A1_Kathleen_small.jpg

    我就是这样下载的。

    Log.d(TFOB.TAG, "Image src: " + desc.getString("image"));
    productURL = new URL (desc.getString("image").trim());
    prod = productURL.openConnection();
    is = prod.getInputStream(); // Exception gets thrown here
    bis = new BufferedInputStream(is);
    bit = BitmapFactory.decodeStream(bis);
    

    这是堆栈跟踪:

    Image src: http://tfob.azstarnet.com/images/authors/Alcalá_Kathleen_small.jpg
    java.io.FileNotFoundException: http://tfob.azstarnet.com/images/authors/Alcalá_Kathleen_small.jpg
    org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1162)
    

    我是不是要摆脱口音什么的?

    3 回复  |  直到 8 年前
        1
  •  0
  •   Peter Mortensen mkoryak    8 年前

    试试这个:

    URLDecoder

        2
  •  2
  •   Peter Mortensen mkoryak    8 年前

    解决方案(在我的情况下):

    当服务器响应代码为>=HTTP_BAD_REQUEST(大于400)时,类HttpURLConnectionImpl的方法getInputStream()抛出

    即使这个文件存在,您的对象也不会给您输入流,因为服务器响应代码是& gt;=400。 更改服务器上的响应代码 使用其他类

    源代码片段: http://www.docjar.com/html/api/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java.html

      867       @Override
      868       public InputStream getInputStream() throws IOException {
      869           if (!doInput) {
      870               throw new ProtocolException(Messages.getString("luni.28")); //$NON-NLS-1$
      871           }
      872
      873           // connect before sending requests
      874           connect();
      875           doRequest();
      876
      ...
      883           if (responseCode >= HTTP_BAD_REQUEST) {
      884               throw new FileNotFoundException(url.toString());
      885           }
      886
      887           return uis;
      888       }
    
        3
  •  0
  •   user6571589    8 年前

    我用残酷的方法解决了:

    private Drawable LoadImageFromWebOperations(String strPhotoUrl) {
        try{    
            String lnk = strPhotoUrl;
                lnk = lnk.replaceAll("à","%C3%A0");
                lnk = lnk.replaceAll("è","%C3%A8");
                lnk = lnk.replaceAll("è","%C3%A9");
                lnk = lnk.replaceAll("ì","%C3%AC");
                lnk = lnk.replaceAll("ò","%C3%B2");
                lnk = lnk.replaceAll("ù","%C3%B9");
                Log.i("Tommy", lnk+"\n");
                InputStream is = (InputStream) new URL(lnk).getContent();
                Drawable d = Drawable.createFromStream(is, "src name");
                return d;
                } catch (Exception e) {
                   //System.out.println("Exc=" 2e);
                    Log.i("Tommy", strPhotoUrl+"\n");
                    Log.i("Tommy", e.toString() + "\n\n");
                    return null;
                }
    }