编码 URL 和 java.lang.IllegalArgumentException
Encoded URL and java.lang.IllegalArgumentException
我编码了一些 URL 参数并且 URL 变得正确,但我仍然得到 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
link 是正确的,我在浏览器中试过了,它解码回西里尔符号并起作用。
看起来技巧就是使用 IDNA encoding:
Android 定义 java.net.IDN 提供转换函数。
这对我有用。将“привет.jpg.to”转换为“http://xn--b1agh1afp.jpg.to/”感谢@18446744073709551615
makeUrlFromWord.append("http://")
.append(IDN.toASCII(splittedUrl.get(0)))
.append(".jpg.to/");
我编码了一些 URL 参数并且 URL 变得正确,但我仍然得到 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
link 是正确的,我在浏览器中试过了,它解码回西里尔符号并起作用。
看起来技巧就是使用 IDNA encoding: Android 定义 java.net.IDN 提供转换函数。
这对我有用。将“привет.jpg.to”转换为“http://xn--b1agh1afp.jpg.to/”感谢@18446744073709551615
makeUrlFromWord.append("http://")
.append(IDN.toASCII(splittedUrl.get(0)))
.append(".jpg.to/");