Punycode
Punycode(ピュニコード、プニコード)とは、国際化ドメイン名で使われる文字符号化方式で、RFC 3492 で定義されている。Unicode で書かれた文字列をDNSで使用可能な、アルファベット(大文字小文字を区別しない)、数字、ハイフンのみの文字列に変換する。 概要ドメイン名として Punycode を使用する際は、ピリオド(
エンコーディング手順この節では、 Punycode のエンコーディング手順を、「bücher」[1]がどのようにして「 ASCII文字の分離最初に、入力文字列中にあるすべてのASCII文字を残し、ASCII文字以外の文字を取り去る。また、ASCII文字以外の文字がある場合は、最後に区切り文字(ハイフン、
非ASCII文字の挿入をコード番号としてエンコード次のエンコーディング手順を理解するために、先にデコーダの動作を理解する必要がある。 デコーダは、2つの状態変数 i と n を持つオートマトンである。 i は分離した後のASCII文字列への挿入位置を表し、その範囲は0 (文字列の先頭への挿入を表す) からASCII文字列の長さ (文字列の末尾への挿入を表す) である。従って、この例では0–5となる。nは挿入する文字のコードポイントである。
i は0から始まり、n は128 (非ASCII文字の最初のコードポイント) から始まる。状態遷移は単調であり、遷移すると i が1だけ増加する。ただし i がすでに最大値の場合は n が1増加し、i は0に戻る。つまり、挿入するべき箇所がなくなると、挿入すべき文字が1つ後の物となる。要するに、各状態遷移の際、nで表されるコードポイントを文字列に挿入するか、挿入をスキップするか、という動きとなる。 コード番号は、エンコーダによって生成される数値であり、デコーダが文字を挿入する前にスキップすべき挿入可能位置がいくつあるかを数値化したものである。"ü" のUnicodeコードポイントはU+00FC, 10進数で表すと252である。よって、ü の字を文字列の1文字目の後ろに挿入するには、ü より前にある124 (251 - 127 = 124) 種類の非ASCII文字が、"bcher" の中に6か所ある挿入ポイントに挿入されるのをスキップし、さらに0文字目 (つまり文字列の先頭) にüが挿入されるのをスキップする必要がある。したがって、デコーダには必要な1文字を挿入するために、(124 × 6) + 1 = 745回の非ASCII文字挿入をスキップするようデコーダに伝える必要がある。 コード番号をASCII文字列として再変換Punycode は、このコード番号を表すためにリトルエンディアンの一般化可変長整数を使用する。例として、コード番号745を「 一般化可変長整数では、各々の桁に異なる閾値を設け、これより小さい数字の表れる桁を最大桁とすることで、数字列の区切りを決める。 Punycode で用いられるリトルエンディアンの場合、小さい桁から表記されるため、先読みなしで任意の桁数の数字を表記できる。 Punycode の場合は、各桁に使える数字として36種の文字を使用する。アルファベット(大文字小文字を区別しない)の'
したがって、「 各桁の重みw(j)および閾値t(j)の値は、以下の式で計算される[2]:
2つ目の文字を挿入する際には、さらにエンコードされたコード番号を繋げていけばよいが、挿入のたびにbiasの値が調節され、各桁の閾値と重みが変わることに注意する必要がある。biasの値が変わらない範囲であれば、単純に追加するだけでよい。例えば、"bücher" に2つ目の非ASCII文字を挿入しようとすると、前述のとおりデコーダは前に戻れないため、最初の挿入結果は "büücher" で、コードは " 脚注
関連項目外部サイト
|
Portal di Ensiklopedia Dunia