エンコードされた国際化ドメイン名をデコードする

こんにちは。masm11 です。

国際化ドメイン名をご存知でしょうか? インゲージ.jp みたいなやつのことですね。 しかし、時々、xn--eck2as8usb.jp と表示されていることがあって、「これ、一体どこ??」 と思うことがあります。今回はこの文字列を元に戻す方法をご紹介します。

国際化ドメイン名とは

ドメイン名には日本語は使えません。 しかし、一部には「日本語を使いたいんじゃああ!!」という人もいて、 対応する必要がありました。 ですが、やっぱりドメイン名には日本語は使えないので、 英数字に変換して使うことにしたのです。

例えば、

インゲージ.jpxn--eck2as8usb.jp

といった感じです。xn-- が付いていれば、国際化ドメイン名を変換したものです。

ブラウザなどでは自動で変換してアクセスしてくれて、便利に使えます。 ですが、時々 xn--eck2as8usb.jp だけを見せられて、「これ何?」と判断する必要に迫られる場面もあります。

変換方法

国際化ドメイン名を英数字に変換するには、Punycode と呼ばれる変換方法を使っています。

Linux では、ライブラリとしては libidn、ツールとしては idn というコマンドが 存在します。

実際に使ってみましょう。

[~]$ echo 'インゲージ.jp' | idn
xn--eck2as8usb.jp
[~]$ 

このように変換してくれます。逆に変換したい時には、-u を付けて、

[~]$ echo 'xn--eck2as8usb.jp' | idn -u
インゲージ.jp
[~]$ 

というように使います。また、

[~]$ echo 'xn--6wyu77cyid.xn--eck2as8usb.jp' | idn -u
開発部.インゲージ.jp
[~]$ 

というように、サブドメインにも対応しています。

まとめ

変換された国際化ドメイン名を元に戻す方法をご紹介しました。 これで、国際化ドメイン名で困ることが一つ減りました。

ですが、国際化ドメイン名には他にも問題があります。

[~]$ echo 'インゲ−ジ.jp' | idn
xn--t9gx68chbza60a.jp
[~]$ 

変換すると上に挙げた例と結果が異なるのですが、何故でしょうか? 実は「−」が長音記号でなくハイフンなのです。 英数字なら見間違えることは滅多にないのですが(それでも l1 は区別しづらいですが)、日本語や、もっと広く世界の言語を相手にすると、見間違えることが増えます。以前、Google.com の "G" の文字がよく似た別の文字の詐欺サイトがあったらしいですね。怖い怖い。

以上、国際化ドメイン名が嫌いな masm11 でした。