public final class IDN extends Object
国際化ドメイン名はRFC 3490で定義されています。 RFC 3490は2つの操作を定義しています。ToASCIIとToUnicodeです。 これら2つの操作は、Stringprepのプロファイルの1つであるNameprepアルゴリズムと、Punycodeアルゴリズムとを使って、ドメイン名文字列の相互変換を行います。
各種フラグを使えば、前述の変換処理の動作を次のように調整することができます。
- ALLOW_UNASSIGNEDフラグを使用した場合、IDN変換の基礎となるUnicodeバージョンであるUnicode 3.2で未割当になっているコード・ポイントを、変換対象のドメイン名文字列に含めることができる。 このフラグを使用しなかった場合、そのような未割当コード・ポイントの存在はエラーとして処理される。
- USE_STD3_ASCII_RULESフラグを使用した場合、RFC 1122とRFC 1123に基づいてASCII文字列がチェックされる。 それらが要件を満たさない場合はエラーになる。
国際化ドメイン名のサポートについては、セキュリティを考慮することが重要です。 たとえば、英語のドメイン名に対して同形異義語化(非ラテン文字の置換による悪意のあるスペル・ミス)が行われる危険性があります。 Unicode Technical Report#36は、IDNサポートのセキュリティ上の問題点と可能な解決策を議論しています。 アプリケーションは、国際化ドメイン名を使用する際に適切なセキュリティ対策を施す責任があります。
- 導入されたバージョン:
- 1.6
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static int
ALLOW_UNASSIGNED
未割当コード・ポイントの処理を許可するフラグ。static int
USE_STD3_ASCII_RULES
STD-3 ASCIIルールに基づくチェックをオンにするフラグ。 -
メソッドのサマリー
修飾子と型 メソッド 説明 static String
toASCII(String input)
RFC 3490のToASCII操作の定義に従って、UnicodeからASCII互換エンコーディング(ACE)への文字列変換を行います。static String
toASCII(String input, int flag)
RFC 3490のToASCII操作の定義に従って、UnicodeからASCII互換エンコーディング(ACE)への文字列変換を行います。static String
toUnicode(String input)
RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。static String
toUnicode(String input, int flag)
RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。
-
フィールド詳細
-
メソッドの詳細
-
toASCII
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
RFC 3490のToASCII操作の定義に従って、UnicodeからASCII互換エンコーディング(ACE)への文字列変換を行います。この簡易メソッドは、次のように2つの引数を取るバージョンを呼び出すかのように動作します。
toASCII
(input, 0);- パラメータ:
input
- 処理する文字列- 戻り値:
- 変換後の
String
- 例外:
IllegalArgumentException
- 入力文字列がRFC 3490の仕様に準拠していない場合
-
toUnicode
RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。ToUnicodeが失敗することは決してありません。 エラーが発生した場合は、入力文字列がそのまま返されます。
ラベルとは、ドメイン名の個々の部分のことです。 RFC 3490で定義されている元のToUnicode操作は、単一ラベル上でしか動作しません。 このメソッドはラベルとドメイン名全体の両方を処理できますが、それは、ドメイン名に含まれるラベルが常にドットで区切られていると仮定することで実現されています。 ドットとして認識される文字は、次のとおりです。\u002E (フル・ストップ)、\u3002 (表意フル・ストップ)、\uFF0E (全角フル・ストップ)、および\uFF61 (半角表意フル・ストップ)。
- パラメータ:
input
- 処理する文字列flag
- 処理フラグ。0、可能なフラグの任意の論理和のいずれか- 戻り値:
- 変換後の
String
-
toUnicode
RFC 3490のToUnicode操作の定義に従って、ASCII互換エンコーディング(ACE)からUnicodeへの文字列変換を行います。この簡易メソッドは、次のように2つの引数を取るバージョンを呼び出すかのように動作します。
toUnicode
(input, 0);- パラメータ:
input
- 処理する文字列- 戻り値:
- 変換後の
String
-