[1] [[IDNA]] の [DFN@en[[CODE@en[ToUnicode]]]] は、[[国際化名札]]を[[ACE名札]]ではない[[国際化名札]]に変換する[[操作]]です。 [2] 仕様書: - [[RFC 3490]] ([[IETF]] [[提案標準]]) -- [CSECTION@en[4.2 ToUnicode]] [3] '''入力''' - [[国際化名札]]、すなわち [[Unicode]] [[符号位置]]の列。 - [[旗]] [CODE@en[[[AllowUnassigned]]]]。 - [[旗]] [CODE@en[[[UseSTD3ASCIIRules]]]]。 [SRC@en[RFC 3490 4.2]] [4] '''出力''' - [[国際化名札]]、すなわち [[Unicode]] [[符号位置]]の列。 [[入力]]が [[ACE名札]]なら、 [[等価]]で[[ACE名札]]では''ない''[[国際化名札]]。 そうでなければ、元のままの[[国際化名札]]。 [SRC@en[RFC 3490 4.2]] ;; [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 で作成した複製を出力とします。 [6] '''性質''' -[7] [[出力]]が[[入力]]より[[符号位置]]が増えることはありません。 [SRC@en[RFC 3490 4.2]]