【问题标题】:Java - InetSocketAddress hostname with accentsJava - 带重音符号的 InetSocketAddress 主机名
【发布时间】:2012-08-18 00:52:11
【问题描述】:

我在与主机名中有一些重音符号 (é è ô...) 的服务器建立连接时遇到问题。

例如:

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。

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

有人有线索吗?我在网上找不到任何东西。

感谢和抱歉我的英语。

【问题讨论】:

  • 我尝试运行您的示例,但返回错误,即主机名 可以 解析为 InetAddress。添加附加行:System.out.println(isa.getAddress()); 打印:www.hôtel.fr/81.200.64.50
  • Damien,仅供参考,我将您的源代码复制到我必须处理的测试项目中,并在 InetSocketAddress 的构造函数中发现语法错误(它之前引用了一个不存在的变量)。我编辑了你的帖子,不想让你对编辑感到惊讶。
  • 坦克菲利普。我的原始源代码有点复杂。
  • @DuncanJones :这真的很奇怪。我尝试了 JDK 6 和 7 并获得了真正的回报。可能是系统管理不一样吧?

标签: java sockets diacritics host hostname


【解决方案1】:

在域名中,变音符号、重音符号等必须通过punycode进行转换。在您的示例中,它将以http://www.xn--htel-vqa.fr/ 结尾。如果不对其进行测试,IDN 类可能会有所帮助。

【讨论】:

  • 非常感谢您的回答!它与手动编码完美配合,我现在只需要使用 IDN 类
  • @Damien 如果这解决了您的问题,请将其标记为答案。
  • 当然,我只是在等待能够做到这一点(网站要求我等待几分钟)
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2019-12-08
  • 1970-01-01
  • 2013-04-13
  • 2023-04-04
相关资源
最近更新 更多