代码之家  ›  专栏  ›  技术社区  ›  Joris Schellekens

使用汉字从URL获取图像

  •  4
  • Joris Schellekens  · 技术社区  · 7 年前

    我想从远程URL获取图像。

    String url =  "http://見.香港/images/wonton.jpg";
    String url2 = IDN.toUnicode(url);
    BufferedImage bi = ImageIO.read(new URL(url2));
    System.out.println(bi);
    

    此代码总是失败

    javax。图像IO。IIOException:无法从URL获取输入流!
    原因:java。网未知后异常:è‹。香港

    我做错了什么?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Jon Reilly    7 年前

    仅对URL的主机部分进行编码,并确保使用 IDN.toASCII() 而不是 IDN.toUnicode()

    String fullUrl = "http://見.香港/images/wonton.jpg";
    URL url = new URL(fullUrl);
    
    url.getProtocol(); // "http"
    url.getHost(); // "見.香港"
    url.getPath(); // "/images/wonton.jpg"
    
    String asciiHost = IDN.toASCII(url.getHost());
    String validUrl = url.getProtocol() + "://" + asciiHost + url.getPath();
    System.out.println(validUrl);
    BufferedImage bi = ImageIO.read(new URL(validUrl));
    

    控制台输出: http://xn--nw2a.xn--j6w193g/images/wonton.jpg

    请注意,如果URI的资源部分包含空格等字符,则可能需要对其进行URL编码。