ToASCII

ToASCII

[1] IDNAToASCII は、国際化ラベルASCIIラベルに変換する演算です。

仕様書

UTS #46 ToASCII 演算

[25] UTS #46 ではドメイン名に対して ToASCII 演算が次の通り定義されています >>24

[37] 入力は、次のものです >>24

ドメイン名
Unicode文字列
UseSTD3ASCIIRules
boolean
CheckHyphens
boolean
CheckBidi
boolean
CheckJoiners
boolean
処理オプション
移行的処理または非移行的処理
VerifyDnsLength
boolean

[38] 出力は、Unicode文字列または失敗です。

[39] 次のようにします >>24

  1. [26] (結果誤り) を、Unicode IDNA互換性処理を実行した結果に設定します。
    ドメイン名
    ドメイン名
    CheckHyphens
    CheckHyphens
    CheckBidi
    CheckBidi
    CheckJoiners
    CheckJoiners
    処理オプション
    処理オプション
    UseSTD3ASCIIRules
    UseSTD3ASCIIRules
    Punycode符号化
    VerifyDnsLength
    VerifyDnsLength
  2. [33] 誤りなら、
    1. [48] 失敗を返し、ここで停止します。
  3. [45] 結果を返します。
[27] 仕様書では ToASCII の一部として説明されている操作の一部を、 ここでは Unicode IDNA互換性処理の一部としています。

[46] テストデータ:

[58] 利用される場面は、Unicode IDNA互換性処理を参照。

ドメインを ASCII に

[51] ドメインをASCIIに (domain to ASCII) する演算は、 ドメイン厳密にする (既定値) について、 次のようにします >>50

  1. [52] 結果を、 UTS #46 ToASCII の結果に設定します。
    ドメイン名
    ドメイン
    UseSTD3ASCIIRules
    厳密にする
    CheckHyphens
    CheckBidi
    CheckJoiners
    移行的処理
    VerifyDnsLength
    厳密にする
  2. [53] 結果失敗なら、
    1. [54] 構文違反とします。
    2. [55] 失敗を返します。
  3. [56] それ以外なら、
    1. [57] 結果を返します。
[63] の改訂で移行的処理から非移行的処理に変更されました >>62

[59] 利用される場面は、Unicode IDNA互換性処理を参照。

関連

[23] 逆の操作を行う ToUnicode 演算もあります。

歴史

IDNA2003 ToASCII 演算

入力

[3] 入力は、国際化名札、すなわち Unicode 符号位置の列と、 AllowUnassigned UseSTD3ASCIIRules です。 RFC 3490 4.1

[6] ドメイン名全体ではなく、構成する個々の名札入力となります。 名札分離子として使う場合には、 FULL STOP, FULLWIDTH FULL STOP, IDEOGRAPHIC FULL STOP, HALFWIDTH IDEOGRAPHIC FULL STOPしなければなりませんと規定されています。 RFC 3490 3.1, 4.

出力

[4] ToASCII 操作は、成功または失敗します。 成功した場合、ASCII名札、 すなわち ASCII 符号位置の列を返します。 このASCII名札は、入力 (>>3) の国際化名札等価なものです。 RFC 3490 4.1

[5] ドメイン名中のいずれかの名札ToASCII失敗するなら、 そのドメイン名国際化ドメイン名として使用してはなりません。 この失敗への対処は応用規定とされています。 RFC 3490 4.1
[7] ドメイン名>>6 により分割し、 それぞれの名札ToASCII を適用した場合、更にで結合してドメイン名に戻すことになりますが、 ASCII ドメイン名とするためには、 FULL STOP を使用しなければなりませんRFC 3490 3.1

算法

[11] ToASCII 演算の実際の処理は次の通りです RFC 3490 4.1

  1. [13] ASCII の範囲 (U+0000U+007F) の符号位置が含まれていれば、2 へ。 含まれていなければ、 3 へ。
  2. [14] Nameprep を適用します ( AllowUnassigned を使用します)。 誤りがあれば、失敗とします。
  3. [15] UseSTD3ASCIIRules が設定されていれば、
    1. 非LDH ASCII 符号位置 (U+0000U+002C, U+002E, U+002F, U+003AU+0040, U+005BU+0060, U+007BU+007F) が含まれていないことを確認します。
  4. [16] 最初の文字や最後の文字U+002D でないことを確認します。
  5. [17] ASCII の範囲 (U+0000U+007F) の符号位置が含まれていれば、 5 に進みます。含まれていなければ、 6 に進みます。
  6. [18] ACE接頭辞で始まらないことを確認します。
  7. [19] Punycode により符号化します。 誤りがあれば、失敗とします。
  8. [20] ACE接頭辞をはじめに追加します。
  9. [21] 符号位置の数が1以上63以下であることを確認します。

[12] 確認して駄目だった場合にどうするとも書かれていませんが、どうするのでしょう・・・。 失敗となることを想定しているように見えますが、明記はされていません。

性質

[8] ToASCII 演算は次のような性質を持っています。

文脈

[35] IDNA2003 ToASCII は次の場面で使われます。

[34] Web Applications 1.0 r8780 Some reference updates, and an example of incumbent vs entry scripts ( ( 版)) <https://html5.org/r/8780>

[36] Cleanup definitions of domainToASCII() and domainToUnicode(). Give up… · whatwg/url@d18639f ( 版) <https://github.com/whatwg/url/commit/d18639f13cb710938f2251a8f0e40b637aa82823>

URL インターフェイス domainToASCII 静的メソッド

[29] URL インターフェイスdomainToASCII 静的メソッドは、次のようにしなければなりません >>28

  1. [30] ドメインを、必須の第1引数を USVString として解釈した結果に設定します。
  2. [31] ASCIIドメインを、ドメインホスト構文解析器を適用した結果に設定します。
  3. [32] ASCIIドメインドメインでなければ、
    1. [40] 空文字列を返します。
  4. [41] それ以外なら、
    1. [42] ASCIIドメインを返します。

[43] ドメインをASCIIに操作を直接呼び出さずにホスト構文解析器を挟んでいますから、 パーセント符号化の処理、IPアドレスかどうかの判定、 不適切なASCII文字の検査が追加で行われます。

[44] Remove URL.domainToASCII and domainToUnicode (annevk著, ) <https://github.com/whatwg/url/commit/2bd0f59b98024921ab90e628b7a526cca5abcb5f>

[49] Editorial: point out that domain to ASCII fails on U+FFFD (annevk著, ) <https://github.com/whatwg/url/commit/cf9854c9e03c12af19e2a249a0d9d6bec6a7419b>

[60] Browser differences in IDNA ToASCII processing between ASCII and non-ASCII input — Anne’s Blog () <https://annevankesteren.nl/2017/02/idna-toascii-differences>

[61] Re: Unicode IDNA feedback (Anne van Kesteren著, ) <https://lists.w3.org/Archives/Public/www-archive/2017Feb/0006.html>

[62] Use Nontransitional_Processing for IDNA ToASCII (annevk著, ) <https://github.com/whatwg/url/commit/f4d84a52e67b154b2d11e04889fe0a35a029c833>

[64] Browser differences in IDNA ToASCII processing between ASCII and non-ASCII input — Anne’s Blog () <https://annevankesteren.nl/2017/02/idna-toascii-differences>

[65] IDNA: use proposed UTS46 flags to avoid breaking YouTube (annevk著, ) <https://github.com/whatwg/url/commit/dc9d83106cada9af507bf37dee3973de97b020fd>

[67] IDNA / UTS #46 "should" requirements (Bidi and Joiners) · Issue #110 · whatwg/url () <https://github.com/whatwg/url/issues/110>

[68] IDNA: realign once UTS46 revision 18 is final · Issue #313 · whatwg/url () <https://github.com/whatwg/url/issues/313>

[69] Address several IDNA issues by annevk · Pull Request #309 · whatwg/url () <https://github.com/whatwg/url/pull/309>

[70] IDNA · Issue #53 · whatwg/url () <https://github.com/whatwg/url/issues/53>

[71] Perhaps do not apply ToASCII for ASCII-only input · Issue #267 · whatwg/url () <https://github.com/whatwg/url/issues/267>

[72] IDNA: UTS46 revision 19 is part of Unicode 10 (annevk著, ) <https://github.com/whatwg/url/commit/b128ba9111c68ad767b472d77d0ada9ef85366ef>

[73] IDNA: UTS46 revision 19 is part of Unicode 10 by annevk · Pull Request #325 · whatwg/url () <https://github.com/whatwg/url/pull/325>

[66] Continue to use Nontransitional processing for IDNA (TRowbotham著, ) <https://github.com/whatwg/url/commit/6800342832fdf99caa265d0106cf984123716d9d>

[74] Preserve use of Nontransitional processing for IDNA by TRowbotham · Pull Request #404 · whatwg/url () <https://github.com/whatwg/url/pull/404>