お薦め ページ


メニュー

ハワイ島 遊覧飛行ツアー

ハワイ島 B&B・ホテル

ハワイ島 不動産情報

ハワイ島 情報・観光ガイド

ブログ(Blog)

その他

関連サイト

: カテゴリー :

DNS・URL・URI

2008年2月11日

ファッション・デザイナーのドメイン名

個人の名前をブランドにしてビジネスをしている方々が、 実際には どんなドメイン名を使ってサイトを運営しているのか、 についてチョット調査してみることにした。 そこで今回は、ファッション・デザイナーさんの場合。

もちろん私は、このファッション・デザイナー業界については門外漢なのだが、 私でも知っている有名デザイナーさんが利用しているドメイン名を調査するために それぞれのデザイナーさんのメインのホームページのアドレスをリストしてみると、 コシノ三姉妹の ドメイン名の形式が 微妙に違っているのがおもしろい。 具体的に言うと、ヒロコ と ミチコ は 「hirokokoshino」のように 「名・姓」の順。 一方、ジュンコ は「 koshinojunko 」と 「姓・名」としている。 また、トップドメインについては、ヒロコ と ジュンコ が「 .com 」を採用している一方 ミチコ は 「 .co.jp 」 を採用している。

また、コシノ三姉妹のドメイン名が「名・姓」もしくは「姓・名」が 連続しているのに対し、森 英恵 の場合、 「名・姓」の間にハイフンを入れて「 hanae-mori.com 」としている。

さらに、コシノジュンコ氏は、「http://koshinojunko.com/」とは別に 「 http://koshinojunko.net/ 」 というブログサイトも持っているようだ。

山本寛斎 氏は 「 http://www.kansai-inc.co.jp/ 」 と 事務所のドメイン名を採用している。 また、そのメインページからは、ニュースブログとして Yahoo の 「 http://blogs.yahoo.co.jp/kansai_office/ 」 へリンクが張られている。

【参考リンク】

カテゴリー: DNS・URL・URI , Internet     22:37 | コメント (0) | トラックバック (0)

2007年8月20日

DNSゾーンデータファイルのリロード方法

最近のブログで、SPFレコードについてレポートしているが、 実際にSPFレコードを更新するためには 該当するドメイン用のゾーンデータファイルの TXTレコードの書き換えを行うことのなる。 その後、その変更を有効にするためには、 ネームサーバ BINDのデーモンである namedに そのゾーンデータファイルの再読み込みをさせなければならない。 その方法が何通りかあるので、調査してみる。

まず、最も原始的な方法。 それは、named を再起動すること。 最も確実だが、変更のたびに再起動していては、チョット大変。

次に、別の古典的な方法。 「ps」コマンドを使って namedのPID番号を調べて、
# kill -1 番号
とする方法。

BIND 8 であれば「 ndc 」コマンドが付属しているハズなので、 それを利用して、
# ndc reload
とすると、ネームサーバーをリロードしてくれる。

また、BIND 9 以降であれば、 「 rndc 」コマンドが付属しているハズなので、 ndcコマンドと同様に
# rndc reload
とするとよい。

カテゴリー: DNS・URL・URI , Mail     22:26 | コメント (0) | トラックバック (0)

2007年7月22日

DDNS (ダイナミックDNS)

ちょっと自宅サーバーを立ててみようかな、と思ったりすると DNSの問題が浮上してくる。 この問題に対応する技術が「ダイナミックDNS」である。

自宅などでインターネットのサービスを受けている場合、 通常 IPアドレスをDHCPなどで取得するため、 接続の都度、IPアドレスが変更されてしまうことがある。 このような環境で外向けのサーバーを運営しようとすると ドメイン名の解決に問題がでてくる。 このような問題を解決する技術が「DDNS (ダイナミックDNS)」である。

「DDNS (ダイナミックDNS)」の定義に関しては、 e-Word の 「DDNS(ダイナミックDNS)」 ページでは
DNSデータベースを動的に更新する技術。 IETFによってRFC 2136として規格化された 「Dynamic Updates in the Domain Name System」(DNS UPDATE) の一般的な呼び名。
となっている。 また、ウィキペディアでは
ダイナミックドメインネームシステム (Dynamic Domain Name System、ダイナミックDNS、DDNS) は、 動的に割り当てられるIPアドレスと、 そのホスト名の対応を、動的に登録・管理する仕組みである。
とある。

この DDNS を具体的に利用できるシステムに DNSとしてお馴染みの「BIND」がある。 それについてウィキペディアでは
もっとも一般的なDNSサーバソフトであるBINDも、 バージョン9からダイナミックDNSをサポートし、 nsupdateというクライアントコマンドで DNSゾーンデータの更新が可能となっている
とある。 ということは、通常のFreeBSDや Linuxの サーバーを 立ち上げれば、そのまま DDNS を利用できるようである。

【参考リンク】

カテゴリー: DNS・URL・URI     22:52 | コメント (0) | トラックバック (0)

2007年5月24日

「 LibIDN Ruby Bindings 」のテスト

前回のブログで 「LibIDN Ruby Bindings」 をインストールするところまできたので、 それでは実際に このライブラリが動作するのかどうか、 テスト用のRubyスクリプトを書いて確認してみる。

「国際化ドメイン名 IDN(Internationalized Domain Name) 」において 最も基本的な変換をテストしてみる。
require 'idn'
include IDN

idnAscii = Idna.toASCII("日本語ドメイン名example.jp")
puts 'Idna.toASCII: ' + idnAscii

idnUnicode = Idna.toUnicode('xn--example-6q4fyliikhk162btq3b2zd4y2o.jp')
puts 'Idna.toUnicode: ' + idnUnicode

このスクリプトを見てすぐに わかるとおり、 Idna.toASCII というメッソドが UTF-8 のユニコードのドメイン名から ASCII文字列に変換するメソッド。 そして、Idna.toUnicode というメッソドが その逆変換である。

注意点として、このスクリプト内ではユニコード(UTF-8)を使っているので ファイルを保存する際には、以前のブログ 『ruby での「 Invalid char `\357' in expression 」エラーメッセージ』 でレポートしたとおり、UTF-8N を指定して保存しておくこと。

このスクリプトの実際の実行結果は
% ruby -rubygems ./IDNtest.rb
Idna.toASCII: xn--example-6q4fyliikhk162btq3b2zd4y2o.jp
Idna.toUnicode: 日本語ドメイン名example.jp
となる。

昨日のブログの通り、この「 LibIDN Ruby Bindings 」のインストールには RubyGemsを採用している。 しかし、上記スクリプトのソース・コード内に 「 require 'rubygems' 」の1行を入れていないので、 変わりにrubyの実行時に 「-rubygems」オプション をつけて対応した。

それから Punycode(ピュニコード)のエンコードとデコード のテスト・スクリプト。
require 'idn'
include IDN

punyAscii = Punycode.encode("日本語ドメイン名example")
puts 'Punycode.encode: ' + punyAscii

punyUnicode = Punycode.decode("example-6q4fyliikhk162btq3b2zd4y2o")
puts 'Punycode.decode: ' + punyUnicode
これも 見たとおり、Punycode.encode と Punycode.decode を呼ぶだけ。 その実行結果は
Punycode.encode: example-6q4fyliikhk162btq3b2zd4y2o
Punycode.decode: 日本語ドメイン名example
となる。

【参考リンク】

カテゴリー: DNS・URL・URI , Ruby     22:23 | コメント (0) | トラックバック (0)

2007年5月23日

「 LibIDN Ruby Bindings 」のインストール

GNU の IDN Library 「 Libidn 」をインストールし テストしてきたが、今度はこれをRubyから呼べるようにしてみよう。 探してみると、 「LibIDN Ruby Bindings」 という Rubyのライブラリがみつかったので 早速インストールしてみる。

インストールの方法は LibIDN Ruby Bindings サイトのドキュメントによると、
  • RubyGemsによる自動インストール
  • Rakeによる 半自動インストール
  • extconf.rb による 手動インストール
と3つが挙げられている。

ここでは、最も簡単な RubyGemsによるインストールを行ってみる。
# gem install --remote idn
Building native extensions.  This could take a while...
ERROR:  Error installing idn:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby18 extconf.rb install --remote idn
checking for main() in -lidn... yes
checking for idna.h... no
ERROR: could not find idna.h header file!

  Please install the GNU IDN library or alternatively specify at least one
  of the following options if the library can only be found in a non-standard
  location:
    --with-idn-dir=/path/to/non/standard/location
        or
    --with-idn-lib=/path/to/non/standard/location/lib
    --with-idn-include=/path/to/non/standard/location/include
エラーが起きてしまった。 idna.h が見つからないようだ。

それなら、と --with-idn-include オプションを付けてみた
# gem install --remote idn --with-idn-include=/usr/local/include
ERROR:  While executing gem ... (OptionParser::InvalidOption)
    invalid option: --with-idn-include=/usr/local/include
#
ところが、まだエラーがでる。

そこで、 「LibIDN Ruby Bindings」 の記述を参考にして gemのコマンド行を2行に分けて指定してみた。
# gem install --remote idn -- \
? --with-idn-include=/usr/local/include
Building native extensions.  This could take a while...
Successfully installed idn-0.0.2
1 gem installed
Installing ri documentation for idn-0.0.2...
Installing RDoc documentation for idn-0.0.2...
#
今度は成功したようだ。 しかし、なぜ1行ではエラーが起こるのか?

1行で
# gem install --remote idn -- --with-idn-include=/usr/local/include
のようにしても成功した。 どうしても「 -- 」が必要なようだ。 ただし、これに関しては RubyGemsのドキュメントをみても どこにもみつけることができなかった。

【参考リンク】

カテゴリー: DNS・URL・URI , Ruby     22:56 | コメント (0) | トラックバック (0)

2007年5月22日

libidn 付属の idn コマンド

前回のブログで FreeBSDに GNUの「 libidn 」がインストールされたわけだが、 と同時に コマンドライン上で libidn をテストできる 「idn」というコマンドもインストールされている。 では 早速 idnコマンドを試してみることにする。

まずは、オプションをつけずに そのまま実行してみると、
% idn
libidn 1.2
Copyright 2002, 2003, 2004, 2005, 2006, 2007 Simon Josefsson.
GNU Libidn comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Libidn under the terms of
the GNU Lesser General Public License.  For more information
about these matters, see the file named COPYING.LIB.
Type each input string on a line by itself, terminated by a newline character.
abc
abc

idn: tld_check_4z: Missing input
%
と このように表示される。 これで、libidn のバージョンが 1.2 であることが確認できる。 その後、入力を待っているので、 ここでは試しに「abc」+「エンターキー」と打ってみると、 そのまま 「abc」が表示された。 次の行で 何も入力せず「エンターキー」と打ってみると、 「idn: tld_check_4z: Missing input」というエラー・メッセージを表示して終了してしまった。

次に ヘルプを表示させてみる。
% idn -h
libidn 1.2

Command line interface to the internationalized domain name library.

All strings are expected to be encoded in the preferred charset used
by your locale.  Use `--debug' to find out what this charset is.  You
can override the charset used by setting environment variable CHARSET.

To process a string that starts with `-', for example `-foo', use `--'
to signal the end of parameters, as in `idn --quiet -a -- -foo'.

Usage: libidn [OPTIONS]... [STRINGS]...

  -h, --help               Print help and exit
  -V, --version            Print version and exit
  -s, --stringprep         Prepare string according to nameprep profile
  -d, --punycode-decode    Decode Punycode
  -e, --punycode-encode    Encode Punycode
  -a, --idna-to-ascii      Convert to ACE according to IDNA (default)
  -u, --idna-to-unicode    Convert from ACE according to IDNA
      --allow-unassigned   Toggle IDNA AllowUnassigned flag  (default=off)
      --usestd3asciirules  Toggle IDNA UseSTD3ASCIIRules flag  (default=off)
  -t, --tld                Check string for TLD specific rules
                             Only for --idna-to-ascii and --idna-to-unicode
                             (default=on)
  -p, --profile=STRING     Use specified stringprep profile instead
                             Valid stringprep profiles are `Nameprep', `iSCSI',
                             `Nodeprep', `Resourceprep', `trace', and
                             `SASLprep'.
      --debug              Print debugging information  (default=off)
      --quiet              Silent operation  (default=off)
%
と このようにヘルプが表示される。 ここに、locale により適切な charset が設定されている必要がある、 と書いてある。 また、現在の charset は --debug オプションをつけるとわかるようだ。

そでは idn コマンドに --debug オプションをつけてCHARSET の確認。 ここでは、無駄な表示を省くために、--quiet もつけた。
% idn --debug --quiet ""
Charset `US-ASCII'.
idn: tld_check_4z: Missing input
こでれ、Charset が「 US-ASCII 」であることがわかった。

そこで
% setenv CHARSET UTF-8
% printenv | grep CHARSET
CHARSET=UTF-8
% idn --debug --quiet ""
Charset `UTF-8'.
idn: tld_check_4z: Missing input
%
として Charset を「 UTF-8 」に変更して それを idn --debug コマンドで確認している。

以前のブログで 「日本語ドメイン名EXAMPLE.jp」というドメイン名は、 「xn--example-6q4fyliikhk162btq3b2zd4y2o.jp」 となる例を挙げていたが、これが idnコマンド で実際に変換されるかどうかテストしてみる。 上記のヘルプより、「-a」が「Convert to ACE according to IDNA (default)」とあるので
% idn --quiet -a 日本語ドメイン名example.jp
 xn--example-6q4fyliikhk162btq3b2zd4y2o.jp
%
それから、「-u」が「Convert from ACE according to IDNA」とあるので、
% idn --quiet -u xn--example-6q4fyliikhk162btq3b2zd4y2o.jp
日本語ドメイン名example.jp
%
となり、どちらの方向にも変換が正しく行われていることが確認できる。

【参考リンク】

カテゴリー: DNS・URL・URI     22:00 | コメント (0) | トラックバック (0)

2007年5月21日

FreeBSDにおける libidn のインストール

昨日の GNU IDN Library - Libidn からの続きとして、 このライブラリをFreeBSDに実際にインストールしてみる。

FreeBSDでは ご多分に漏れず GNU libidn も ports によりインストールできる。 ディレクトリは /usr/ports/dns/libidn/ となっている。 そこで
# cd /usr/ports/dns/libidn/
# make install
のように インストールを開始する。 makeから沢山の情報が表示されるが、 その中に
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
とあるので、libidn が /usr/local/lib にインストールされたことがわかる。

また、
test -z "/usr/local/include" || ../build-aux/install-sh -c -d "/usr/local/include"
 install  -o root -g wheel -m 444 'stringprep.h' '/usr/local/include/stringprep.h'
 install  -o root -g wheel -m 444 'idna.h' '/usr/local/include/idna.h'
 install  -o root -g wheel -m 444 'punycode.h' '/usr/local/include/punycode.h'
 install  -o root -g wheel -m 444 'idn-free.h' '/usr/local/include/idn-free.h'
 install  -o root -g wheel -m 444 'pr29.h' '/usr/local/include/pr29.h'
 install  -o root -g wheel -m 444 'tld.h' '/usr/local/include/tld.h'
test -z "/usr/local/include" || ../build-aux/install-sh -c -d "/usr/local/include"
 install  -o root -g wheel -m 444 'idn-int.h' '/usr/local/include/idn-int.h'
とあるので、各種の ヘッダー(インクルード)ファイルが /usr/local/include/ 下にインストールされたことがわかる。

そして
install -o root -g wheel -m 555 -s .libs/idn /usr/local/bin/idn
から、idn コマンドが ディレクトリ /usr/local/bin/ 下にインストールされたこともわかる。

それから
install  -o root -g wheel -m 444 'punycode.el' '/usr/local/share/emacs/site-lisp/punycode.el'
install  -o root -g wheel -m 444 'idna.el' '/usr/local/share/emacs/site-lisp/idna.el'
のように Emacs Lisp API もインストールされている。 その後、多数の manページがインストールされている。

【参考リンク】

カテゴリー: DNS・URL・URI , FreeBSD     22:28 | コメント (0) | トラックバック (0)

2007年5月20日

GNU IDN Library - Libidn

昨日のブログで 国際化ドメイン名 (IDN) のソフトウェア開発環境(ライブラリ)について まとめてみたが、今回のブログでは その中でも GNU IDN Library 「 Libidn 」を取り上げてみる。

このGNUの「 Libidn 」とは IETFの 「国際化ドメイン名 (IDN: Internationalized Domain Names ) ワークグループ」 によって定義されている Stringprep, Punycode そして IDNA規格 を実現した Cライブラリである。

このライブラリには Stringprep と呼ばれるUnicode の正規化や Nameprep, iSCSI, SASL や XMPP が。 また、IDNA により定義されているPunycode や ACE(ASCII Compatible Encoding) 。 TLD(Top-Level Domain)を定義する メカニズム 等が含まれている。 詳しくは、 「GNU IDN Library - Libidn」 に説明がある。

この Libidn に含まれる関数も
  • Utility Functions
  • Stringprep Functions
  • Punycode Functions
  • IDNA Functions
  • TLD Functions
  • PR29 Functions
と分類が分かれている。 それぞれの 関数群の具体的な使用方法については、 「Libidn Manual web page」 から、各種のフォーマットのマニュアルが参照可能である。

【参考リンク】

カテゴリー: DNS・URL・URI     22:09 | コメント (0) | トラックバック (1)

2007年5月19日

国際化ドメイン名 (IDN) のソフトウェア開発環境(ライブラリ)について

国際化ドメイン名(IDN : Internationalized Domain Name) を 操作するプログラムを開発する際に RFCを読みながら一から開発なんかしていられない。 そこで、国際化ドメイン名 (IDN) を 操作できるライブラリやソフトウェア開発キット (SDK) を探してみる。

JPNIC 「 idnkit 」

まず、日本ネットワークインフォメーションセンター(JPNIC) の 「国際化ドメイン名ツールキット(idnkit)バージョン1.0」。 idnkitとは
  • 国際化ドメイン名とPunycodeのエンコーディング変換コマンド: idnconv
  • IDNの処理機能を提供するC言語用API(ライブラリ): libidnki
から構成されている、とある。 また、 idnkit とは別に、ダウンロード・ページには 各種Windows の Winsock32 ラッパー「idn wrapper」も含まれているようだ。 これをインストールすると、国際化ドメイン名に対応していないWindowsアプリが 国際化ドメイン名対応になるらしい。

この idnkit を FreeBSDにインストールするには 「ports/dns/idnkit/」 のページもあるので、通常のportsのインストールと同様にすればよいであろう。 また、PHP等から利用するには、 「php-idnkit について」 のページに解説がある。

VeriSign 「 IDN SDK 」

次に、VeriSign の 「IDN SDK」 こいつは Java API と C API をサポートしているようだ。

GNU IDN Library 「 Libidn 」

最後に、お馴染みの GNU からリリースされている IDN Library 「 Libidn 」 また、Rubyから この GNU の Libidn を利用するための Ruby Bindings for the GNU LibIDN library というのがある。 これについて詳しくは、LibIDN Ruby Bindings の 「ドキュメント」 ページにある。

その他

上記以外のライブラリやSDKについては、 「IDN-enabled Applications「Programming Languages」」 に 詳しくまとめられている。

【参考リンク】

カテゴリー: DNS・URL・URI     22:41 | コメント (0) | トラックバック (0)

2007年5月18日

日本語ドメイン名に関する技術的制限のまとめ

日本ネットワークインフォメーションセンターの 「汎用 JP ドメイン名登録等に関する技術細則」 から、日本語ドメイン名に関する 主な 技術的制限(ルール)を まとめておく。

  • 「ドメイン名」は、ラベルをピリオド(".")で区切って連結した文字列である。
  • 「ASCIIラベル」は、英字26文字("A"から"Z")、数字10文字("0"から"9")、そして ハイフン("-") の 合計 37文字からなる文字列である。ただし、ASCIIラベルの先頭と末尾の文字はハイフン であってはならない。
  • ASCIIラベル中では、英字の大文字・小文字の区別はなく同じ文字とみなされる。
  • ASCIIラベルの長さは、63文字以下でなければならない。
  • 日本語ラベルの長さは、15文字以下でなければならない。
上記に、「日本語ラベルの長さが15文字以下」とあるが、 これは15文字までの日本語であれば、Punycode(ピュニコード)にエンコードした結果が ASCIIラベルの63文字以内に収まるのであろう。 実際には、15文字よりもっと長い日本語文字列でも 十分に63文字以内に収まるのだが、 Punycode(ピュニコード)の場合、結果の文字長は 変換してみなければわからないので このような制限が設けられていると思われる。

また、上記細則には記載されていないが、 ドメインのラベルを連ねた際の長さについて、 RFC1035 [DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION] には、
To simplify implementations, the total number of octets that represent a domain name (i.e., the sum of all label octets and label lengths) is limited to 255.
とある。これの日本語訳では
実装を単純化するために、ドメイン名を表すオクテットの合計の数(すべてのラ ベルオクテットとラベル長の合計)は255に制限されます。
とある。 結局 規格的には ラベル長の合計は 255 に制限されているようだ。

【参考リンク】

カテゴリー: DNS・URL・URI     22:00 | コメント (0) | トラックバック (0)

2007年5月17日

日本語ドメイン Punycode 変換・逆変換サービス一覧

日本語を含めた 国際化ドメイン名 (IDN) に対応した Punycode 変換・逆変換サービス を提供しているサイトを まとめてみる。



また、日本語.jp の 「国際化ドメイン名対応アプリケーション」 ページには 国際化ドメイン名に対応したアプリケーションが まとめられている。 ちなみに、この情報のオリジナルはベリサイン社の 「IDN-enabled Applications」 ページとなっている。

【参考リンク】

カテゴリー: DNS・URL・URI     22:05 | コメント (0) | トラックバック (0)

2007年5月16日

Punycode(ピュニコード)

Punycode(ピュニコード)とは インターネットで使われるドメイン名にアルファベットや数字以外に漢字なども使えるようにする 国際化ドメイン名( IDN (Internationalized Domain Name) ) で使われる文字符号化方式で、IETFにより、 「RFC3492」 として標準化されている。

国際化ドメイン名では、ドット(.)で区切られたドメイン名の階層レベルごとに エンコードされ、それぞれの先頭には「xn--」という識別子が付けられる。 また、大文字と小文字は区別されない。

特に このピュニコードでは、 文字数最長63文字、 文字の種類37文字 と 非常に過酷な制限のあるドメイン名の空間において、 できるだけ効率よくエンコードができるように 非常に複雑な変換を行っている。 その結果、通常のエンコードでは予想できない変換結果となる。

具体的には、例えば、アルファベットと全角文字が交じり合った 「日本語ドメイン名EXAMPLE.jp」というドメイン名は、 ピュニコードに変換すると、 「xn--example-6q4fyliikhk162btq3b2zd4y2o.jp」 のように、「EXAMPLE」という部分が小文字に変換されかつ 前の方に来ている。 また 「3年B組金八先生.jp」のように、「3」と「B」に間に「年」という 日本語が存在している場合でも 「xn--3b-ww4c5e180e575a65lsy2b.jp」 というように、「3」と「B」が先頭部分に移動してくっついてしまっている。

このおもしろい変換メカニズムには 「一般化可変長整数」というアルゴリズムが採用されており、 詳細については もちろん 前述の 「RFC3492」 に書かれているわけだが、それを読み解くのは大変だ。 それを 「日本語ドメイン取得.com」 の 「Punycode (プニーコード)」 解説ページでは とても判りやすく解説してくれている。

【参考リンク】

カテゴリー: DNS・URL・URI     22:47 | コメント (0) | トラックバック (0)

2007年5月15日

IDNA(Internationalizing Domain Name in Application)

IDNAについて 「日本ネットワークインフォメーションセンター (JPNIC: Japan Network Information Center)」 の 「国際化ドメイン名」 のページから引用させていただくと、
国際化ドメイン名を使って通信を行う際には、 ASCII文字列からなるドメイン名に変換を行った上で通信が行われることになりますが、 この変換の際に使われる技術と処理手順を規定しているものが IDNA(Internationalizing Domain Name in Application)と呼ばれる技術です。

このIDNAでは、 ユーザ側のアプリケーションで国際化ドメイン名の解釈を行うことや、 入力された文字列をNAMEPREPという仕組みで正規化すること、 既存のDNSとの互換性を保つために国際化ドメイン名をPunycode と 呼ばれるアルゴリズムでASCII文字列に変換することなどが定められています。

国際化ドメイン名を利用する際には、 各アプリケーションはこのIDNAに従って国際化ドメイン名をネットワークに送出します。
とある。

また、 RBB Today IT辞典 の 「IDNA(アイディエヌエー。Internationalizing Domain Names in Applications)」 によると、このIDNAの仕様は「RFC 3490」として規定されている、 とあり、具体的には、
  1. ドメイン名に使用できる文字は、Unicodeで規定されている文字(一部使えない文字もある)とする。
  2. Unicodeの文字列を NAMEPREP により正規化を行う。
  3. ASCII文字列への変換(ACE、ASCII Compatible Encoding)には、Punycodeを使用する。
  4. Punycodeで変換された文字列の前には、変換されたことがわかるように「xn--」(ACE prefix)をつける。
のようなことを国際化ドメイン名を扱うアプリケーションの内部で行うことになっている、 とある。

【参考リンク】

カテゴリー: DNS・URL・URI     22:38 | コメント (0) | トラックバック (0)

2007年5月14日

国際化ドメイン名 (IDN:Internationalized Domain Name)

インターネットのアドレスのうち、「skymerica.com」のような部分のことを ドメイン名という。 このドメイン名に日本語をはじめとした アルファベット以外の多言語文字を使ったモノを 「国際化ドメイン名 (IDN)」と呼んでいる。 ちなみに、IDNとは「Internationalized Domain Name」の頭文字。

この国際化ドメイン名については、 「日本ネットワークインフォメーションセンター (JPNIC: Japan Network Information Center)」 の 「国際化ドメイン名」 ページに 詳しい説明がある。 それによると、
国際化ドメイン名とは、 従来のドメイン名で使用されている アルファベット、 数字、ハイフン に加え、そのラベルに 漢字 や ひらがな、アラビア文字 などの ASCII以外の文字を使えるようにするもので、 英語では IDN(Internationalized Domain Name) と呼ばれています。
とある。 これにより、われわれにとっては日本語ドメイン名が可能となる。

この国際化ドメイン名を実現するために、 現行のDNSの構造を壊すことがないように 7bit ASCIIだけで構成される文字列を採用している。 但し、アプリケーション側、つまり ブラウザやメールソフトの方で これらに対応する必要がある。

国際化ドメイン名を実現するための技術的なしくみ としては、 大きく2つのステップがある。 ひとつが「NAMEPREP」と呼ばれる入力された文字列の正規化技術。 ちなみに正規化とは、一定の標準形に整形すること。 例えば、全角の「。」(句点)は半角の「.」(ドット)に、 全角の「jp」は半角の「jp」に変換するようなこと。

もうひとつが「Punycode」と呼ばれる 多言語を7bit ASCII文字列へ変換する技術である。 例えば、「日本語ドメイン名EXAMPLE.jp」というドメイン名は、 「xn--example-6q4fyliikhk162btq3b2zd4y2o.jp」 というドメイン名に変換される。

【参考リンク】

カテゴリー: DNS・URL・URI     22:28 | コメント (0) | トラックバック (0)

2007年5月 6日

ruby で URLエンコード プログラミング

昨日のブログで「 URLエンコード(URIエンコード)」について レポートしたが、 それでは、rubyで実際にプログラミングしてみよう。

rubyのサンプル・プログラムは以下の様に
require 'uri'
p URI.escape('ウィキペディア')
たった2行である。 これで「ウィキペディア」という言葉を URLエンコードした結果が表示されるハズである。 ウィキペディア「URLエンコード」ページに 例題として「ウィキペディア」という言葉を Shift_JIS、EUC-JP、UTF-8 の各漢字コードで URLエンコードした結果があるので、 それと比較できるように、ここでは同じ言葉としてみた。

Shift_JIS、EUC-JP、UTF-8 の それぞれの漢字コードに 対応するために、それぞれに URLencodeSJIS.rb、URLencodeEUC.rb、URLencodeUTF8N.rb と名づけて、エディターから 漢字コードを指定して保存した。 それぞれを ruby で実行してみると、
C:\soft\ruby>ruby URLencodeSJIS.rb
"%83E%83B%83L%83y%83f%83B%83A"

C:\soft\ruby>ruby URLencodeEUC.rb
"%A5%A6%A5%A3%A5%AD%A5%DA%A5%C7%A5%A3%A5%A2"

C:\soft\ruby>ruby URLencodeUTF8N.rb
"%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%83%87%E3%82%A3%E3%82%A2"
のような結果となり、当たり前であるが、 ウィキペディア「URLエンコード」ページ の結果と同じになった。

【参考リンク】

カテゴリー: DNS・URL・URI , Ruby , 文字コード・文字化け     22:54 | コメント (0) | トラックバック (0)

2007年5月 5日

URLエンコード(URIエンコード)

ウェブページのアドレス部分で 「%数字%数字...」 の羅列になっている部分を時々見かける。 「URLエンコード」または「URIエンコード」とは アドレス部分に直接記述することができない文字列を このような形式へ変換すること。

例えば、Google.co.jp で「エンコード」という文字を検索した結果、 ブラウザーのアドレス部分には 、
http://www.google.co.jp/search?hl=ja&q=%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
というように、「エンコード」という文字が 「%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89」 のように変換されて表示されている。 この他にも、ウィキペディアや amazon.co.jp でも利用されているが、 ブラウザによっては「http://ja.wikipedia.org/wiki/URLエンコード」のように 日本語でキチンと表示されているので直接目にふれない場合もある。

この 「URLエンコード」 については ウィキペディア「URLエンコード」によると。
URLエンコード(ゆーあーるえるえんこーど)とはURIに2バイト文字を使う際に行われる符号化のことである。 URIの規則を定める RFC 3986 では、 URIにASCIIの非予約文字以外の文字データは、 「%xx」(xxは16進数)という形でコードを表記することが定められている。 その際にどの文字コードを用いるかは実装によって異なる。
とある。 ここで、「どの文字コードを用いるかは実装によって異なる」とあるが、 上記の Google、ウィキペディア、amazon.co.jp では UTF-8 を用いているようである。

ASCIIの非予約文字(記号文字)については、 Diaspar「URIエンコード(URLエンコード)」 ページに 例を挙げて詳しく解説されている。

また、 TAG index「URLエンコード・デコードフォーム」けんどもネット「URL エンコード/デコードフォーム」 のように、 、URLエンコード、URLデコードを行ってくれるツールを提供しているサイトも 多数 存在している。

【参考リンク】

カテゴリー: DNS・URL・URI , 文字コード・文字化け     22:18 | コメント (0) | トラックバック (0)

 
ハワイ島での遊覧飛行ツアーとB&Bのスペシャリスト、スカイメリカ
Copyright © 2003,2009 Skymerica Corp. All rights reserved.