日本語ドメインでのjava.net.UnknownHostException

日本語ドメインとは

国際化ドメインとも呼ばれる。インターネットで使われるドメイン名にアルファベットや数字といったASCII文字以外に漢字、アラビア文字、キリル文字、ギリシア文字などUnicode文字を使えるようにする仕組み。 日本語であれば日本語ドメイン名とも呼ばれる。

例えば、日本語.jpなど。
DNSサーバやWebサーバと実際に通信する際には、Punycodeと呼ばれる形式にエンコード、デコードして処理を行う。

Unicode:http://日本語.jp
Punycode:http://xn--wgv71a119e.jp/

Unicodeに変換する際の仕様は http://www.ietf.org/rfc/rfc3491.txt
Punycodeに変換する際の仕様は http://www.ietf.org/rfc/rfc3492.txt

Javaで変換する場合は、java.net.IDNクラスを使用する。

https://docs.oracle.com/javase/8/docs/api/index.html

public class TestIDN {
      public static void main(String[] args) {

            try {

                  System.out.println(java.net.IDN.toASCII("日本語.jp"));
                  System.out.println(java.net.IDN.toUnicode("xn--wgv71a119e.jp"));

            } catch (IllegalArgumentException e) {
                  // toASCII関数では、入力文字列がRFC 3490の仕様に準拠していない場合、IllegalArgumentExceptionが発生する
            }

      }

}

スポンサーリンク