# idncmpコマンドの使用方法

idnkitに付属する、idncmpコマンドの使用方法について解説します。

- idncmpの起動
- idncmpの実行例
- idncmpのオプション

## idncmpの起動

idncmpコマンドは、2つの国際化ドメイン名をそれぞれPunycodeへ変換し、 その結果を一致比較するツールです。 idncmpを起動する際の、コマンド行の形式は次の通りです。

> `% idncmp` [オプション...] ドメイン名1 ドメイン名2

idncmpはドメイン名1とドメイン名2をそれぞれ Punycodeへ変換して、両者を比較します。 両者が一致すれば、標準エラー出力に

> `matched.`

と出力して、終了コード0を返して実行を終えます。 両者に違いがあった場合は、

> `unmatched.`

と出力して、終了コード1を返して実行を終えます。 ドメイン名1とドメイン名2の片方もしくは両方が 国際化ドメイン名として不適当である場合、その理由 (例: "invalid encoding") を標準エラー出力に出力して、終了コード2を返して実行を 終えます。 メモリ不足のような内部エラーが起きた場合は、その理由を標準エラー出力 に出力して、終了コード3を返して実行を終えます。

## idncmpの実行例

idncmpの実行例をいくつか示します。

>     % idncmp "привет.мир" "xn--b1agh1afp.xn--h1ahn"
>     matched.

引数として渡されたドメイン名は同じではありませんが、両者を Punycode変換した結果は同じですので、「一致した (matched)」と 判定されます。

引数として渡されるドメイン名が何というエンコーディングで表現されて いるかはidncmpが自動判定しますが、うまくいかない場合は`-in` オプションを使用することで強制的に指定することができます。 以下の例では、KOI8-rを指定しています。

>     % idncmp -in KOI8-r "привет.мир" "xn--b1agh1afp.xn--h1ahn"
>     matched.

引数に指定するドメイン名は、従来のドメイン名であっても構いません。 両者が一致すれば、国際化ドメイン名同様「一致した」ものと扱われます。

>     % idncmp hello HELLO
>     matched.

## idncmpのオプション

idncmpが認識するオプションは、次の通りです。 よく使われると思われるオプションに関しては、短縮形として1文字のオプション を用意してあります。

オプション | 説明
--- | ---
`-in` エンコーディング | 引数として与えられたドメイン名のエンコーディング名を 指定します。 以下のエンコーディング名称を認識します。 `iconv_open()`関数が認識するエンコード名 Punycode UTF-8 エンコーディング別名定義ファイル (`idnalias.conf`) で 定義された別名 デフォルトは、環境変数`IDN_LOCAL_CODESET`がセットされている 場合はその値となり、セットされていなければロケール情報から取得した エンコーディングとなります (「ローカルエンコーディング」 参照)。
`-i` エンコーディング
`-conf` パス | idnkitの設定ファイルのパス名を指定します (デフォルトで読み込まれる設定ファイルのパスは、 「設定ファイルについて」 を参照のこと)。 `-noconf`ないし`-C`オプションと一緒に指定 した場合はそちらが優先され、設定ファイルは読み込まれません。
`-c` パス
`-noconf` | idnkitの設定ファイルを読み込まないようにします。
`-C`
`-registration` | IDNA2008の「ドメイン名登録プロトコル (registration protocol)」 を使用します。
`-g`
`-lookup` (デフォルト) | IDNA2008の「ドメイン名参照プロトコル (lookup protocol)」 を使用します。 ドメイン名登録プロトコルでは行われる「ハイフンチェック」が省略され、 「その他文脈依存文字 (CONTEXTO)」のチェックも簡素化されます。 詳しくは、「idnkitの変換処理の詳細」を 参照して下さい。 デフォルトでは、こちらのプロトコルを使用します。
`-l` (デフォルト)
`-nomap` | マッピング処理を行いません。 「`-skip map`」と等価です。
`-M`
`-skip` アクション名,... | アクション名で指定されたエンコード/デコード処理工程 の実行を省略します。 "`,`" で区切って複数のアクションを指定することが可能です。 また、複数回`-skip`オプションを指定しても構いません。 アクション名として以下の名称を認識します。 map マッピング asclower ASCIIの英大文字を小文字に変換 rtconv PunycodeからUnicodeへの変換 prohcheck 禁止コードポイントチェック unascheck 未割り当てコードポイントチェック nfccheck NFC適用済みチェック prefcheck ACE接頭辞チェック hyphcheck ハイフンチェック combcheck 合成文字チェック ctxjcheck 「連結制御文脈依存文字 (CONTEXTJ)」チェック ctxocheck ドメイン名登録プロトコル (registration protocol) 用の 「その他制御文脈依存文字 (CONTEXTO)」チェック ctxolitecheck ドメイン名参照プロトコル (lookup protocol) 用の 「その他制御文脈依存文字 (CONTEXTO)」チェック bidicheck BIDI (bidirectional display; 双方向表示) チェック idnconv UnicodeからPunycodeへの変換 lencheck ラベル長チェック rtcheck ラウンドトリップチェック
`-localcheck` ファイル | 追加で、各コードポイントに対する「ローカルチェック」 を行います。 詳しくは、 「セットファイル」 を参照して下さい。
`-e` ファイル
`-quiet` | 実行結果を出力しません。 結果は、終了コードから判断して下さい。
`-q`
`-test` | 現在のオプション指定と環境変数等の設定状況で実行すると、 「現在の言語」とローカルエンコーディングが何になるのかを表示し、 終了します。
`-t`
`-version` | バージョン情報を表示して実行を終了します。
`-v`
`-help` | ヘルプメッセージを表示して終了します。
`-h`