我是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模拟器没有任何例外。
有人知道为什么吗?
感谢。
答案 0 :(得分:0)
%字符是网址中的特殊字符,需要进行转义。实际上,%是转义字符。您可以将其转义为%25
:
String ipv6 = "tcp://[fe80::ceb8:a8ff:fe23:5b84%25wlan0]:1883";