JavaTM Platform
Standard Ed. 6

java.net
クラス IDN

java.lang.Object
  上位を拡張 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 アルゴリズムとを使って、ドメイン名文字列の相互変換を行います。

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

これらのフラグの論理和をとることができます。

国際化ドメイン名のサポートについては、セキュリティーを考慮することが重要です。たとえば、英語のドメイン名に対して「同形異義語化」(非ラテン文字の置換による悪意のあるスペルミス) が行われる危険性があります。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 への文字列変換を行います。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

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 つの引数を取るバージョンを呼び出すかのように動作します。

toASCII(input, 0);

パラメータ:
input - 処理する文字列
戻り値:
変換後の String

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。