Punycode変換(国際化ドメイン名)
日本語などを含む国際化ドメイン名(IDN)とPunycode(ASCII互換エンコーディング)を相互変換します。
使い方のヒント
- 複数のラベル(`.`で区切られた部分)からなるドメイン名も、ラベルごとに自動判定して変換します。ASCII文字のみのラベルはそのまま、非ASCII文字を含むラベルだけが `xn--` 接頭辞付きに変換されます。
- 「Punycode → ドメイン名」モードでは、`xn--` 接頭辞を含むラベルのみをデコード対象とし、それ以外のラベルはそのまま扱います。
- ドメイン名だけでなく、メールアドレスの `@` より後ろの部分(ドメイン部)にも同じ変換ロジックが適用できます。
- 実際にブラウザのアドレスバーに国際化ドメイン名を入力すると、多くのブラウザは内部的にPunycodeへ変換した上でDNS解決を行っています。
よくある質問
余談ですが ― 「猫」「日本語」がドメイン名になるまでの舞台裏
国際化ドメイン名(IDN)の議論は1990年代後半から始まりましたが、標準化までには長い時間がかかりました。DNSの根幹を変更せずに非ASCII文字を扱う方法として複数の方式が提案されましたが、最終的に「アプリケーション層(クライアント側)でエンコード・デコードを行い、DNSサーバー自体は変更しない」というPunycode方式(2003年にRFC 3492として標準化)が採用されました。
Punycodeという名前は「Unicode」と「An amusing pun(ちょっとした駄洒落)」に由来するとされ、アルゴリズム自体はBootstring(IBMの研究者らが考案した、任意の文字集合を制限された文字集合にエンコードする汎用手法)という、より一般的なエンコーディング手法をドメイン名向けに特化させたものです。Punycodeという名前の由来自体がジョーク混じりであるところに、開発者コミュニティらしいユーモアが感じられます。
現在、日本語ドメイン(`.jp`)や絵文字ドメイン(`💩.la`のような実例も存在する)など、様々な言語・記号を使ったドメイン名が実際に登録・運用されていますが、その裏側では必ずこのPunycodeによる変換処理が行われています。ブラウザのアドレスバーに表示される美しい日本語ドメインも、DNSサーバーとの通信では地道な`xn--`から始まるASCII文字列としてやり取りされているのです。