URISyntaxException:无效的%序列

时间:2017-12-08 06:51:30

标签: java android uri ipv6

我是IPv6新手,当我尝试使用IPv6创建URI时,遇到了这个异常。完整的例外是

java.net.URISyntaxException: Invalid % sequence: %wl in authority at index 32: tcp://[fe80::ceb8:a8ff:fe23:5b84%wlan0]:1883
at libcore.net.UriCodec.validate(UriCodec.java:58)
at java.net.URI.parseURI(URI.java:394)
at java.net.URI.<init>(URI.java:204)

我使用的代码看起来像这样

String ipv6 = "tcp://[fe80::ceb8:a8ff:fe23:5b84%wlan0]:1883";
URI uri = new URI(ipv6);

SocketAddress sockaddr = new InetSocketAddress(InetAddress.getByName(uri.getHost()), 1883);
Socket socket = new Socket();
socket.connect(sockaddr);

以上代码在运行Android 7.1.1的三星Galaxy S5中没有任何例外,但运行Android 5和6的Asus Zenfone GoTV和Android模拟器没有任何例外。

有人知道为什么吗?

感谢。

1 个答案:

答案 0 :(得分:0)

%字符是网址中的特殊字符,需要进行转义。实际上,%是转义字符。您可以将其转义为%25

String ipv6 = "tcp://[fe80::ceb8:a8ff:fe23:5b84%25wlan0]:1883";