[1] 
[CODE@en[[[ToASCII]]]] [[演算]]や [CODE@en[[[ToUnicode]]]]
[[演算]]には、[[入力]]として[[フラグ]] 
[DFN[[CODE@en[[VAR[UseSTD3ASCIIRules]]]]]]
があります。

これは、[[入力]]である[[ラベル]]に対して、
[[STD 3]] が規定する [[ASCII文字]]に関する制約を適用するかを指定します。
この検査を行うかどうかの従来の動作を維持するために用意されています。

;; [9] 「従来の動作」が何なのかあまりはっきりとは書かれていませんが、
[CODE(char)[[[_]]]] など [[LDH]] 以外の[[文字]]の使用を認めることを指している模様です。
必ずしもすべての[[ASCII文字]]を認めることは意味しておらず、 [[ToUnicode]]
や [[ToASCII]] の外側で[[実装依存]]な制約が課されるのが普通です。

* 仕様書

[REFS[
- [2] [[IDNA2003]] [CITE@en[RFC 3490 - Internationalizing Domain Names in Applications (IDNA)]] ([TIME[2011-01-08 12:07:35 +09:00]] 版) <http://tools.ietf.org/html/rfc3490#section-4>
- [4] [CITE@en-us[UTS #46: Unicode IDNA Compatibility Processing]] ([TIME[2010-10-30 01:01:25 +09:00]] 版) <http://unicode.org/reports/tr46/#STD3_Rules>
]REFS]

* IDNA2003 での意味

[5] [[IDNA2003]] では [[ToASCII]] [[演算]]や [[ToUnicode]] [[演算]]で
[[UseSTD3ASCIIRules]] [[フラグ]]が使われています。

[3] この「[[STD 3]] の制約」というのが何を指すのかあまりはっきりとは書いてありませんが、
[[ToASCII]] [[演算]]の定義によれば [[LDH]] でない[[ASCII文字]]を排除することを指すようです。

;; [6] [CODE(char)[[[-]]]] を最初や最後で使ってはいけないという制約はこの[[フラグ]]とは別途チェックされています。

[7] [[ToASCII]] [[演算]]では、この[[フラグ]]が設定されていれば、
[[LDH]] でない[[ASCII文字]]が含まれていると[[失敗]]とみなされます。

[8] [[ToUnicode]] [[演算]]では、この[[フラグ]]が設定されていれば、
[[LDH]] でない[[ASCII文字]]が含まれていると元の[[入力]]と同じものが[[出力]]となります。

* UTS #46

[10] [[UTS #46]] でも [[IDNA2003]] と同じく [[UseSTD3ASCIIRules]] 
[[フラグ]]があります。この[[フラグ]]は[[真]]に設定することが強く推奨されています
[SRC[>>4]]。

;; [13] [[IDNA2003]] ではこの[[フラグ]]は設定されているかいないかですが、
[[UTS #46]] では[[真]]か[[偽]]かとされています。

[11] この[[フラグ]]が[[真]]に設定されているか否かによって[[IDNA写像表]]の定義が変わります。
([[IDNA写像表]]の項を参照。)

[12] この[[フラグ]]が[[偽]]の場合は[[ラベル]]の[[妥当性]]について[[実装依存]]の制約を課すこととなります。
([[ラベル]]の項を参照。)

* メモ

[14] [[IDNA2008]] では[[導出特性値]]や[[Uラベル]]と[[Aラベル]]の定義上、結果的に
[[UseSTD3ASCIIRules]] [[フラグ]]が設定された状態に相当するようになっている模様です。