[1] [[IDNA]] の [DFN@en[[CODE@en[ToASCII]]]] は、[[国際化名札]]を[[ASCII名札]]に変換する[[操作]]です。 [2] 仕様書; - [[RFC 3490]] ([[IETF]] [[提案標準]]) -- [CSECTION@en[4.1 ToASCII]] [3] '''入力''' [[入力]]は、[[国際化名札]]、すなわち [[Unicode]] [[符号位置]]の列と、[[旗]] [CODE@en[[[AllowUnassigned]]]]、[[旗]] [CODE@en[[[UseSTD3ASCIIRules]]]] です。 [SRC@en[RFC 3490 4.1]] ;; [6] [[ドメイン名]]全体ではなく、構成する個々の[[名札]]が[[入力]]となります。 [[点]]を[[名札分離子]]として使う場合には、 [CODE(charname)@en[[[FULL STOP]]]], [CODE(charname)@en[[[FULLWIDTH FULL STOP]]]], [CODE(charname)@en[[[IDEOGRAPHIC FULL STOP]]]], [CODE(charname)@en[[[HALFWIDTH IDEOGRAPHIC FULL STOP]]]] を[[点]]と[['''しなければなりません''']]と規定されています。 [SRC@en[RFC 3490 3.1, 4.]] [4] '''出力''' [CODE@en[[[ToASCII]]]] [[操作]]は、[[成功]]または[[失敗]]します。 [[成功]]した場合、[[ASCII名札]]、 すなわち [[ASCII]] [[符号位置]]の列を返します。 この[[ASCII名札]]は、入力 (>>3) の[[国際化名札]]と[[等価]]なものです。 [SRC@en[RFC 3490 4.1]] ;; [5] [[ドメイン名]]中のいずれかの[[名札]]が [CODE@en[[[ToASCII]]]] に[[失敗]]するなら、 その[[ドメイン名]]は[[国際化ドメイン名]]として使用[['''してはなりません''']]。 この[[失敗]]への対処は[[応用]]規定とされています。 [SRC@en[RFC 3490 4.1]] ;; [7] [[ドメイン名]]を >>6 により分割し、 それぞれの[[名札]]に [CODE@en[[[ToASCII]]]] を適用した場合、更に[[点]]で結合して[[ドメイン名]]に戻すことになりますが、 [[ASCII]] [[ドメイン名]]とするためには、 [CODE(charname)@en[[[FULL STOP]]]] を使用[['''しなければなりません''']]。 [SRC@en[RFC 3490 3.1]] * 算法 [11] [[ToASCII]] [[演算]]の実際の処理は次の通りです [SRC@en[RFC 3490 4.1]]。 = [13] [[ASCII]] の範囲 ([CODE(char)[[[U+0000]]]]〜[CODE(char)[[[U+007F]]]]) の''外''の[[符号位置]]が含まれていれば、2 へ。 含まれていなければ、 3 へ。 =[14] [[Nameprep]] を適用します ([[旗]] [CODE@en[[[AllowUnassigned]]]] を使用します)。 [[誤り]]があれば、[[失敗]]とします。 = [15] [[旗]] [CODE@en[[[UseSTD3ASCIIRules]]]] が設定されていれば、 == [[非LDH]] [[ASCII]] [[符号位置]] ([CODE(char)[[[U+0000]]]]〜[CODE(char)[[[U+002C]]]], [CODE(char)[[[U+002E]]]], [CODE(char)[[[U+002F]]]], [CODE(char)[[[U+003A]]]]〜[CODE(char)[[[U+0040]]]], [CODE(char)[[[U+005B]]]]〜[CODE(char)[[[U+0060]]]], [CODE(char)[[[U+007B]]]]〜[CODE(char)[[[U+007F]]]]) が含まれていないことを確認します。 = [16] 最初の[[文字]]や最後の[[文字]]が [CODE(char)[[[U+002D]]]] でないことを確認します。 = [17] [[ASCII]] の範囲 ([CODE(char)[[[U+0000]]]]〜[CODE(char)[[[U+007F]]]]) の''外''の[[符号位置]]が含まれていれば、 5 に進みます。含まれていなければ、 6 に進みます。 = [18] [[ACE接頭辞]]で始まら''ない''ことを確認します。 = [19] [[Punycode]] により[[符号化]]します。 [[誤り]]があれば、[[失敗]]とします。 = [20] [[ACE接頭辞]]をはじめに追加します。 = [21] [[符号位置]]の数が1[[以上]]63[[以下]]であることを確認します。 [12] 確認して駄目だった場合にどうするとも書かれていませんが、どうするのでしょう・・・。 * 性質 [8] [[ToASCII]] [[演算]]は次のような性質を持っています。 -[9] すべてが [[ASCII]] [[文字]]の[[名札]]を[[入力]]とした場合、 ([[失敗]]するか、または) そのままの[[文字列]]を返します。 [SRC@en[RFC 3490 4.1]] -[10] [CODE@en[[[ToASCII]]]] は[[冪等]]です (複数回適用しても、 同じ結果が得られます)。 [SRC@en[RFC 3490 4.1]]