如何使用 Apache HTTP 客户端获取像 "http://ньюбаланс.рф" 这样的西里尔域名?

How to fetch Cyrillic domain like "http://ньюбаланс.рф" with Apache HTTP Client?

org.apache.httpcomponents 版本 4.3.6 使用 httpclient 我尝试通过 new HttpGet(url)http://ньюбаланс.рф 等域名执行 GET 请求,但是它最终出现以下错误:

Caused by: java.net.UnknownHostException: ?????????.??
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress.lookupAllHostAddr(InetAddress.java:907)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
at java.net.InetAddress.getAllByName0(InetAddress.java:1255)
...

url 变量具有正确的 UTF-8 值 - 它绝对不是从“?”构建的字符。

如何向此类域名发送请求?

我找到了解决方案

"http://"+IDN.toASCII(domain);

解析域名前需要将域名编码为弱码

final encodedDomain = IDN.toASCII(unicodeDomain);

另请查看此处的 Android 文档:http://developer.android.com/reference/java/net/IDN.html