【问题标题】:URISyntaxException: Invalid % sequenceURISyntaxException: 无效的 % 序列
【发布时间】:2018-05-22 09:23:52
【问题描述】:

我是 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 模拟器中不运行。

有人知道为什么吗?

谢谢。

【问题讨论】:

    标签: java android uri ipv6


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,这不起作用:在我的计算机上,Java 会将其解释为“名为 '25wlan0' 的网卡”。
    • 那是java中的一个bug。我不确定你能做些什么……:(
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多