モジュール java.base
パッケージ java.net

クラスIDN



  • public final class IDN
    extends Object
    通常のUnicode表現とASCII互換エンコーディング(ACE)表現との間で国際化ドメイン名(IDN)の変換を行うメソッドを提供します。 国際化ドメイン名がUnicodeの全範囲の文字を使用できるのに対し、従来のドメイン名はASCII文字に制限されています。 ACEはASCII文字のみを使用するUnicode文字列のエンコーディングであり、ドメイン・ネーム・システムなど、従来のドメイン名しか認識しないソフトウェアで使用することができます。

    国際化ドメイン名はRFC 3490で定義されています。 RFC 3490は2つの操作を定義しています。ToASCIIとToUnicodeです。 これら2つの操作は、Stringprepのプロファイルの1つであるNameprepアルゴリズムと、Punycodeアルゴリズムとを使って、ドメイン名文字列の相互変換を行います。

    各種フラグを使えば、前述の変換処理の動作を次のように調整することができます。

    • ALLOW_UNASSIGNEDフラグを使用した場合、IDN変換の基礎となるUnicodeバージョンであるUnicode 3.2で未割当になっているコード・ポイントを、変換対象のドメイン名文字列に含めることができる。 このフラグを使用しなかった場合、そのような未割当コード・ポイントの存在はエラーとして処理される。
    • USE_STD3_ASCII_RULESフラグを使用した場合、RFC 1122RFC 1123に基づいてASCII文字列がチェックされる。 それらが要件を満たさない場合はエラーになる。
    これらのフラグの論理和をとることができます。

    国際化ドメイン名のサポートについては、セキュリティを考慮することが重要です。 たとえば、英語のドメイン名に対して同形異義語化(非ラテン文字の置換による悪意のあるスペル・ミス)が行われる危険性があります。 Unicode Technical Report#36は、IDNサポートのセキュリティ上の問題点と可能な解決策を議論しています。 アプリケーションは、国際化ドメイン名を使用する際に適切なセキュリティ対策を施す責任があります。

    導入されたバージョン:
    1.6
    • フィールドのサマリー

      フィールド 
      修飾子と型 フィールド 説明
      static int ALLOW_UNASSIGNED
      未割当コード・ポイントの処理を許可するフラグ。
      static int USE_STD3_ASCII_RULES
      STD-3 ASCIIルールに基づくチェックをオンにするフラグ。
    • フィールドの詳細

      • ALLOW_UNASSIGNED

        public static final int ALLOW_UNASSIGNED
        未割当コード・ポイントの処理を許可するフラグ。
        関連項目:
        定数フィールド値
      • USE_STD3_ASCII_RULES

        public static final int USE_STD3_ASCII_RULES
        STD-3 ASCIIルールに基づくチェックをオンにするフラグ。
        関連項目:
        定数フィールド値
    • メソッドの詳細

      • toASCII

        public static String toASCII​(String input,
                                     int flag)
        RFC 3490のToASCII操作の定義に従って、UnicodeからASCII互換エンコーディング(ACE)への文字列変換を行います。

        ToASCII操作は失敗する可能性があります。 ToASCIIが失敗するのは、その任意のステップが失敗した場合です。 ToASCII操作が失敗すると、IllegalArgumentExceptionがスローされます。 この場合、その入力文字列を国際化ドメイン名に含めるべきではありません。

        ラベルとは、ドメイン名の個々の部分のことです。 RFC 3490で定義されている元のToASCII操作は、単一ラベル上でしか動作しません。 このメソッドはラベルとドメイン名全体の両方を処理できますが、それは、ドメイン名に含まれるラベルが常にドットで区切られていると仮定することで実現されています。 ドットとして認識される文字は、次のとおりです。\u002E (フル・ストップ)、\u3002 (表意フル・ストップ)、\uFF0E (全角フル・ストップ)、および\uFF61 (半角表意フル・ストップ)。ドットがラベル区切り文字として使用されている場合、このメソッドはさらに、変換後の出力文字列内でそれらのすべてを\u002E (フル・ストップ)に変更します。

        パラメータ:
        input - 処理する文字列
        flag - 処理フラグ。0、可能なフラグの任意の論理和のいずれか
        戻り値:
        変換後のString
        例外:
        IllegalArgumentException - 入力文字列がRFC 3490の仕様に準拠していない場合
      • toASCII

        public static String toASCII​(String input)
        RFC 3490のToASCII操作の定義に従って、UnicodeからASCII互換エンコーディング(ACE)への文字列変換を行います。

        この簡易メソッドは、次のように2つの引数を取るバージョンを呼び出すかのように動作します。

        toASCII(input, 0);
        パラメータ:
        input - 処理する文字列
        戻り値:
        変換後のString
        例外:
        IllegalArgumentException - 入力文字列がRFC 3490の仕様に準拠していない場合
      • toUnicode

        public static String toUnicode​(String input,
                                       int flag)
        RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。

        ToUnicodeが失敗することは決してありません。 エラーが発生した場合は、入力文字列がそのまま返されます。

        ラベルとは、ドメイン名の個々の部分のことです。 RFC 3490で定義されている元のToUnicode操作は、単一ラベル上でしか動作しません。 このメソッドはラベルとドメイン名全体の両方を処理できますが、それは、ドメイン名に含まれるラベルが常にドットで区切られていると仮定することで実現されています。 ドットとして認識される文字は、次のとおりです。\u002E (フル・ストップ)、\u3002 (表意フル・ストップ)、\uFF0E (全角フル・ストップ)、および\uFF61 (半角表意フル・ストップ)。

        パラメータ:
        input - 処理する文字列
        flag - 処理フラグ。0、可能なフラグの任意の論理和のいずれか
        戻り値:
        変換後のString
      • toUnicode

        public static String toUnicode​(String input)
        RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。

        この簡易メソッドは、次のように2つの引数を取るバージョンを呼び出すかのように動作します。

        toUnicode(input, 0);
        パラメータ:
        input - 処理する文字列
        戻り値:
        変換後のString