[1] [[IDNA]] の [DFN@en[[CODE@en[ToUnicode]]]] は、[[国際化ラベル]]を[[ACEラベル]]ではない[[国際化ラベル]]に変換する[[演算]]です。 * 仕様書 - [2] [CITE@en[RFC 3490 - Internationalizing Domain Names in Applications (IDNA)]] ([[IETF]] [[提案標準]]) -- [CSECTION@en[4.2 ToUnicode]] * 入力 - [3] [[国際化名札]]、すなわち [[Unicode]] [[符号位置]]の列。 [SRC@en[RFC 3490 4.2]] - [9] [[フラグ]] [CODE@en[[[AllowUnassigned]]]]。 [SRC@en[RFC 3490 4.2]] - [10] [[フラグ]] [CODE@en[[[UseSTD3ASCIIRules]]]]。 [SRC@en[RFC 3490 4.2]] [11] ただし、 >>11 は使われていません。 * 出力 - [4] [[国際化名札]]、すなわち [[Unicode]] [[符号位置]]の列。 [SRC@en[RFC 3490 4.2]] -- [12] [[入力]]が [[ACE名札]]なら、 [[等価]]で[[ACE名札]]では''ない''[[国際化名札]]。 -- [13] そうでなければ、元のままの[[国際化名札]]。 ;; [5] [CODE@en[[[ToUnicode]]]] は[[失敗]]しません。 >>8 の[[算法]]が[[失敗]]した場合、 [[入力]]をそのまま[[出力]]とします。 [SRC@en[RFC 3490 4.2]] * 算法 [8] = すべての[[符号位置]]が [[ASCII]] の範囲 ([CODE(char)[[[U+0000]]]]〜[CODE(char)[[[U+007F]]]]) に収まっていれば、 3 に進みます。 = [[Nameprep]] を適用します ([[旗]] [CODE@en[[[AllowUnassigned]]]] を使用します)。 [[誤り]]があれば[[失敗]]とします。 = [[ACE接頭辞]]ではじまることを確認し、 [[符号位置]]の列の複製を作ります。 = [[ACE接頭辞]]を削除します。 = [[Punycode]] を[[復号]]します。 [[誤り]]があれば[[失敗]]とします。 結果の列の複製を作ります。 = [CODE@en[[[ToASCII]]]] を適用します。 = 6 の結果が 3 で作成した複製と[[一致]]することを確認します。 ここで、[[一致]]するかは [[ASCII]] の[[大文字]]・[[小文字]]を区別しない[[比較]]によります。 = 5 で作成した複製を出力とします。 * 性質 -[7] [[出力]]が[[入力]]より[[符号位置]]が増えることはありません。 [SRC@en[RFC 3490 4.2]] * 関連 [14] 逆の操作として、 [[ToASCII]] [[演算]]があります。