java.net.URI 因主机部分中的特殊字符而阻塞

Rao*_*uke 6 java http url-encoding

我有一个 URI 字符串,如下所示:

http://www.christlichepartei%F6sterreichs.at/steiermark/

我正在用这个字符串创建一个 java.lang.URI 实例,它成功了,但是当我想检索主机时,它返回 null。如果我完全按照上面显示的方式输入它,Opera 和 Firefox 也会阻塞在这个 URL 上。但是如果 URI 类无效,不应该抛出一个 URISyntaxException 吗?那么我怎样才能检测到 URI 是非法的呢?

当我使用产生的 URLDecoder 解码字符串时,它的行为也相同

http: //www.christlicheparteiösterreichs.at/steiermark/

现在这被 Opera 和 Firefox 接受,但 java.net.URI 仍然不喜欢它。我该如何处理这样的 URL?

谢谢

axt*_*avt 4

Java 6 具有IDN处理国际化域名的类。因此,以下生成带有编码主机名的 URI:

\n\n
URI u = new URI("http://" + IDN.toASCII("www.christlichepartei\xc3\xb6sterreichs.at") + "/steiermark/");\n
Run Code Online (Sandbox Code Playgroud)\n

  • `IDN#toASCII` 仅适用于标签或完整域名,不适用于整个 URI 字符串。这可能会导致意想不到的后果。 (2认同)