メインコンテンツへジャンプする

JPNICはインターネットの円滑な運営を支えるための組織です

ロゴ:JPNIC

WHOIS 検索 サイト内検索 WHOISとは? JPNIC WHOIS Gateway
WHOIS検索 サイト内検索

idnconv の仕様書


概要

idnconv は国際化ドメイン名のエンコード、デコードを行うツールです。

ここでは、idnconv の仕様について解説します。 使用方法については、 idnconv のガイド のほうをご覧ください。


実装

ドメイン名のエンコードやデコードの処理はすべて idnkit ライブラリ (libidnkit) の低レベル API (res モジュール および resconf モジュール) を 使用しています。

エンコードの処理

idnconv のエンコード (-reverse オプション無指定時の動作) では、入力データに対して一行ずつ次のような処理を行います。

  1. 入力行の読み込み
    ファイルあるいは標準入力から 1 行分のデータを読み込みます。
  2. UTF-8 に変換
    入力行をローカルエンコーディングから UTF-8 に変換します。
  3. 国際化ドメイン名が書かれた部分の検出
    -whole (または -w) オプションが指定された 場合は、入力行全体を 1 つのドメイン名とみなします。指定されていない 場合は、入力行の中で次の条件をすべて満たす部分を国際化ドメイン名と みなして、一つずつ取り出します。
    • 1文字以上の非ASCII文字を含むこと
    • 従来のドメイン名に許される文字 (アルファベット、数字、ハイフン)、 非ASCII文字、ピリオドだけから構成されていること
  4. 国際化ドメイン名を IDN エンコーディングに変換
    取り出した個々の国際化ドメイン名を、エンコードして IDN エンコーディング に変換します。処理の詳細は次の通りです。
    1. デリミタマッピング
      句点「。」(U+3002) などをピリオド (U+002E) に変換します。
    2. ローカルマッピング
      取り出した個々の国際化ドメイン名に対して、ローカルなマッピングを行います。 -localmap オプションでマッピング方式が指定されていれば、 その方式にしたがって行われます。指定されていなければ、設定ファイルの記述 にしたがって、国際化ドメイン名の TLD に応じたマッピングを行います。 ただし、-nolocalmapが指定されていると、この処理は省略されます。
    3. NAMEPREP
      NAMEPREP を行います。 順番にマッピング、正規化、禁止文字の検査、未割り当てコードポイントの検査、 双方向文字列の検査を行います。 禁止文字や未割り当てコードポイントが含まれていた場合や、 双方向文字列の制限に反していた場合には、 エラーを出力して処理を中止します。 ただし、-nonameprep (または -N) が指定されて いると、NAMEPREP 処理は一切行いません。 また、-nounassigncheck (または -U) が指定されて いると、未割り当てコードポイントの検査だけを行わないように、 -nobidicheck (または -B) が指定されていると、 双方向文字列の検査だけ行わないようになります。
    4. ASCII 文字の検査
      ASCII 文字に関する検査を行います。先頭か末尾にハイフン (U+002D) が 来ているラベル、もしくは英数字やハイフン以外の ASCII 文字を含んだ ラベルがあった場合は、エラーを出力して処理を中止します。 ただし、-noasciicheck (または -A) が指定 されていれば、この検査は飛ばします。
    5. IDN エンコーディングに変換
      UTF-8 から IDN エンコーディングに変換します。
    6. 文字数の検査
      ドメイン内の各ラベルの文字数を調べ、空のラベルや 64 文字以上のラベルが あれば、エラーを出力して処理を中止します。 -nolengthcheck (または -L) が指定されて いれば、この処理は行いません。
  5. 結果を出力
    行の内容を、変換結果として標準出力に出力します。

デコードの処理

idnconv のデコード (-reverse オプション指定時の動作、逆変換) は、 エンコードと似ていますが、処理は対称をなしていません。 入力データに対して一行ずつ次のような処理を行います。

  1. 入力行の読み込み
    ファイルあるいは標準入力から 1 行分のデータを読み込みます。
  2. UTF-8 に変換
    入力行をローカルエンコーディングで記述されているとみなして、UTF-8 に 変換します。
  3. 国際化ドメイン名が書かれた部分の検出
    -whole (または -w) オプションが指定された場合は、 入力行全体を 1 つのドメイン名とみなします。指定されていない場合は、 入力行の中で (IDN エンコーディングで表現したものを含めて) 正しい ドメイン名とみなせるものを、すべて国際化ドメイン名として取り出します。
  4. 国際化ドメイン名をローカルエンコーディングに変換
    取り出した個々の国際化ドメイン名を、デコードしてローカルエンコーディング に変換します。処理の詳細は次の通りです。
    1. デリミタマッピング
      句点「。」(U+3002) などをピリオド (U+002E) に変換します。
    2. NAMEPREP
      NAMEPREP を行います。 順番にマッピング、正規化、禁止文字の検査、未割り当てコードポイントの検査、 双方向文字列の検査を行います。 禁止文字や未割り当てコードポイントが含むラベルは、入力時点の状態に戻し、 そのラベル対する変換処理は一切行わないようにします。 また、-nonameprep (または -N) が指定されていれば、 NAMEPREP 処理は行いません。 -nounassigncheck (または -U) が指定されていると、 未割り当てコードポイントの検査だけを行わないように、 -nobidicheck (または -B) が指定されていると、 双方向文字列の検査だけ行わないようになります。
    3. UTF-8 に変換
      IDN エンコーディングから UTF-8 に変換します。
    4. ラウンドトリップチェック
      ドメイン名を構成する個々のラベルに対してエンコードを行い、結果を前項の UTF-8 に変換」を実行する前の文字列と比較します。 両者が異なる場合、そのラベルは入力時点の状態に戻し、そのラベルに対する 変換処理は一切行わないようにします。 両者が同じであれば、ラベルを前項の「UTF-8 に変換」を実施した後の状態に 戻します。 -noroundtripcheck オプションが指定されていれば、 この処理は行いません。
    5. ローカルエンコーディングに変換
      UTF-8 からローカルエンコーディングに変換します。 ローカルエンコーディングに変換できない文字を含むラベルについては、変換 せずに入力時点の状態に戻します。
  5. 結果を出力
    行の内容を、変換結果として標準出力に出力します。

このページを評価してください

このWebページは役に立ちましたか?
ページの改良点等がございましたら自由にご記入ください。

このフォームをご利用した場合、ご連絡先の記入がないと、 回答を差し上げられません。 回答が必要な場合は、お問い合わせ先をご利用ください。

ロゴ:JPNIC

Copyright© 1996-2020 Japan Network Information Center. All Rights Reserved.