编码的URL和java.lang.IllegalArgumentException

时间:2015-02-05 10:07:58

标签: java android http encoding

我编码了一些网址参数,网址变得正确,但我仍然得到java.lang.IllegalArgumentException。这是我的代码:

StringBuilder makeUrlFromWord = new StringBuilder();

List<String> splittedUrl = mParser.splitRequest(urls[0]);

try {
    makeUrlFromWord.append("http://")
        .append(URLEncoder.encode(splittedUrl.get(0), HTTP.UTF_8))
        .append(".jpg.to/");
} catch (UnsupportedEncodingException e) {
                e.printStackTrace();
}

Log.d("Made url", makeUrlFromWord.toString());

以下是日志的一部分:

D/Made url﹕ http://%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.jpg.to/
W/System.err﹕ java.lang.IllegalArgumentException: Host name may not be null

链接是正确的,我在浏览器中尝试了这个,它重新编码回西里尔符号并起作用。

2 个答案:

答案 0 :(得分:1)

看起来诀窍是使用IDNA encoding: Android定义了提供转换功能的java.net.IDN

答案 1 :(得分:0)

这对我有用。将“привет.jpg.to”转换为“http://xn--b1agh1afp.jpg.to/”,感谢@ 18446744073709551615

makeUrlFromWord.append("http://")
   .append(IDN.toASCII(splittedUrl.get(0)))
   .append(".jpg.to/");