Java - 使用带有重音符号的主机名 InetSocketAddress

6
我遇到了一个问题,无法与主机名中包含重音符号(é è ô...)的服务器建立连接。
例如:
String oUrl = "www.hôtel.fr";   
System.out.println(oUrl);
InetSocketAddress isa = new InetSocketAddress(oUrl.toString(), 80);
System.out.println(isa.isUnresolved());

ISA未被解决,但可以用于www.google.fr。

我尝试对主机名进行URL编码(使用UTF-8字符集的URLEncoder,因此主机名为www.h%C3%B4tel.fr),但没有结果。

有人有什么线索吗?我在网上找不到任何信息。

谢谢,对我的英语表示抱歉。


我尝试运行你的例子,但是返回了 false,即主机名可能无法解析为 InetAddress。添加一行额外的代码:System.out.println(isa.getAddress()); 输出结果如下:www.hôtel.fr/81.200.64.50 - Duncan Jones
Damien,简单告诉你一声,我把你的源代码复制到了我要开发的测试项目中去进行工作,结果发现InetSocketAddress的构造函数存在一个语法错误(它在之前引用了一个不存在的变量)。我修改了你的帖子,希望你不会因此感到惊讶。 - Philip Tenn
谢谢Philip。我的原始源代码有点复杂。 - Damien
@DuncanJones:这真的很奇怪。我在 JDK 6 和 7 上尝试了一下,返回的确是 true。可能是系统管理方面有所不同? - Damien
1个回答

4

在域名中,必须通过punycode转换umlauts、accents等字符。在您的示例中,它将最终变成http://www.xn--htel-vqa.fr/。没有测试过,IDN类可能会有所帮助。


非常感谢您的回答!手动编码后它可以完美地工作,现在我只需要使用IDN类。 - Damien
@Damien 如果这个解决了你的问题,请将其标记为答案。 - Duncan Jones
当然,我只是在等待能够这样做(网站让我等几分钟)。 - Damien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接