機能の説明
国際化ドメイン名を Unicode と punycode の間で相互変換します。punycode とは、DNS が実際に解決する ASCII 形式(xn-- ラベル)です。münchen.de と入力すると xn--mnchen-3ya.de が得られます。これがレジストラーが保存し、リゾルバーが問い合わせる名前です。逆方向では Unicode の表示形式が復元されます。このツールは RFC 3492 の bootstring アルゴリズム全体を自身で実行し、非 ASCII 文字を含むラベルのみをエンコードするという IDNA の規則に従うため、純粋な ASCII ラベルはそのまま通過します。
使い方
- 方向を選びます: Unicode → Punycode または Punycode → Unicode。
- ドメインを入力するか、例チップをタップします:
münchen.de、日本.jp、xn--mnchen-3ya.de、bücher.example。 - 結果が大きく中央に表示されます。コピーするか、入力をそのまま含む共有リンクをコピーします。
Swap ボタンは方向を反転し、現在の出力を入力へ持ち込みます。ドメインをエンコードして Swap をタップすれば、ワンクリックでデコードして戻せます。
例
| 入力 | 出力 |
|---|---|
münchen.de |
xn--mnchen-3ya.de |
Bücher.DE |
xn--bcher-kva.de - IDNA に従い、入力はまず小文字化されます |
café.fr |
xn--caf-dma.fr |
日本.jp |
xn--wgv71a.jp |
example.com |
example.com - 純粋な ASCII はそのまま通過 |
xn--mnchen-3ya.de |
münchen.de |
punycode の仕組み
DNS が扱うのは ASCII だけです。リゾルバーもレジストリーもキャッシュも、すべて Unicode ではなくバイトの上に築かれてきました。それでも人々は自分の文字でドメインを使いたいので、国際化された名前は変装して旅をします。非 ASCII ラベルはそれぞれ xn-- を接頭辞とする ASCII ラベルへ圧縮され、ブラウザーはルックアップが成功した後に限って Unicode 形式を表示します。この接頭辞が「本当のラベルを復元するためにデコードせよ」という目印です。
圧縮の部分が巧妙です。münchen のようなラベルは、ほとんどが ASCII 文字に 1 人の部外者(ü)が加わった構成です。RFC 3492 で bootstring アルゴリズムとして定義された punycode は、部外者たちとその位置を、base-36 の数字とハイフンからなるコンパクトな接尾辞に詰め込みます:
- ASCII 文字を順番にそのまま書き写します:
mnchen。 - 区切りのハイフンを付けます:
mnchen-。 - 挿入される各文字とその位置を表す delta エンコードされた値を付けます:
3ya。
結果の xn--mnchen-3ya は münchen だけのものです。アルゴリズムは可逆で、デコード結果をエンコードすれば常に同じラベルに戻ります。デコードはラベルを区切りで分割し、delta を再生して、各 Unicode 文字を記録された位置に再挿入します。
IDNA の仕上げの規則が 2 つ。エンコードはまずドメインを小文字化します。ドメインは大文字小文字を区別せずに比較され、ACE 形式は常に小文字だからです。デコードは xn-- で始まるラベルだけに手を触れます。それ以外はそのまま通過するので、not--valid は not--valid のままです。1 つでも不正な xn-- ラベル - おかしな数字、途切れ、オーバーフロー - があるとドメイン全体が拒否され、ツールはその旨を表示します。
補足事項
- プライベート: 変換はすべて 100% クライアント側で実行されます。ドメインがブラウザーの外に出ることはありません。
- フィッシングへの注意:
xn--ラベルは有名な名前を偽装できます(ホモグラフ攻撃)。ブラウザーは 1 つのラベルの中で文字体系が混在する場合に punycode 形式を露見させます。このツールは、どのラベルが何を隠しているかを正確に示します。 - 関連ツール: URL Inspector、HTML Entity Encoder、Slugify。