[3] 大文字と小文字を区別しない (case‐insensitive) 比較は、 ASCII だけを対象としている間はおおよそ自明に定まりますが、ASCII より大きな文字集合を扱う場合には様々な可能性があり、処理も複雑化します。
[25] 区別しない比較は、等しいと判断される文字(列)の組を定義する方法と、 case folding があります。 case folding は、 対象となる文字列を比較のための正規形に変換することであり、 得られた文字列の単純な文字の列としての比較によって元々の文字列が同じかどうかを決定します。
[44] case はここでは大文字と小文字の事を指し、 sensitive とは繊細という意味, insensitive はその逆ですから、大文字・小文字を区別しないことをあらわします。
[4] ASCII大文字・小文字不区別は、文字集合が Unicode であったとしても、 大文字と小文字の同一視を行う対象は ASCII文字だけに限定するもので、 実装も簡潔かつ高速です。HTML の構文などラテン文字と少数の記号のみで記述される場面で有用で、 よく用いられています。
[40] byte case-insensitiveは、 0x00
-0x7F
を ASCII
として解釈した時に大文字と小文字を同一視したとみなされるような、
バイト列に関する比較方法です。 HTTP のような ASCII ベースのプロトコルを扱う場面で用いられています。
[6] IRCにおける大文字と小文字は、 IRC が欧州で ISO/IEC 646の版のもとで開発された歴史的経緯ゆえ、 純粋に文字についてではなく、 (ASCII では記号となっているものも含めた) 特定の符号位置について大文字と小文字の関係が定義されています。
[31] 単純case foldingは、 Unicode Standard で定義されている最も単純な case folding です。
[26] 既定無case一致は、 Unicode Standard で定義されている基本的な case folding (完全case folding) による比較です。
[28] 正準無case一致は、 Unicode Standard で定義されている NFC 相当の case folding による比較です。
[5] 互換性無case一致は、Unicode Standard で定義されている NFKC 相当の case folding による比較です。
[27] 識別子無case一致は、 Unicode Standard で定義されている識別子のための case folding による比較です。
[29] i;unicode-casemap における比較は、 IETF によって定義された独自の case folding を用いており、 Unicode Standard が小文字化を採用しているのに対し、こちらは大文字化しています。
[38] Stringprep のプロファイルにも case folding が組み込まれていることがあります (>>32)。
[15] 大文字と小文字の変換や比較は言語や地域によって違いがあります。 Unicode Standard では言語に依存しない既定の方法を定義し、 必要に応じてそれを仕立てて言語や環境に合ったものにカスタマイズして良いこととしています。
[17] 言語依存の大文字と小文字の変換の具体例として、 Unicode Standard >>16 には次のものが挙げられています。
[24] このうち >>18 と >>19 については Unicode Character Database の SpecialCasing.txt に情報が含まれています。
[39] DNS (伝統的ドメイン名) における扱いは、ASCIIラベルを参照。
[32] Stringprep には case folding のための変換表が含まれており、 IDNA2003 で使われる Nameprep などで使われています。
[33] 多くのプログラミング言語やその文字列操作を行うライブラリーには、 大文字と小文字の変換や比較のための関数などが含まれています。 古めの言語では ASCII の範囲での変換が実装されており、 新しめの言語では Unicode のいずれかの定義に従った変換が実装されているのが普通です。
[34] 正規表現の多くの実装には i
修飾子があり、
多くの場合 Unicode のいずれかの定義に従って大文字・小文字を区別をしない一致を行います。
[42] case folding は、ほとんどの場合、大文字を小文字に変換します。
[11] Web では当初大文字と小文字の比較をどう行うか明確に定義してこなかったため、 実装によって比較の方法が異なっていたり、場面によって異なっていたりすることもありました。 しかし現在では原則としてASCII大文字・小文字不区別な比較を行うように HTML、DOM、 CSS などすべて共通化されていて、ごく一部でのみ互換性大文字・小文字不区別が使われています。
[7] HFS Plus のファイル名では大文字・小文字不区別文字列比較算法 (FastUnicodeCompare) が使用されています。
[9] 大文字・小文字の表は >>8 で配布されています。 Unicode の版は明記されておらず、 Unicode の拡張に合わせて更新されている形跡は見当たりません。
[1] Web Forms 2.0 で比較に大文字・小文字を区別しないとき、 比較の際には Unicode で規定された case folding を実行しなければなりません。
[2] この定義は後に改められ、現在の HTML ではASCII大文字・小文字不区別または互換性大文字・小文字不区別を使っています。
[14] ほとんどの文字はASCII内、非ASCII内で大文字と小文字の変換・比較が行われますが、 一部の文字は比較方法によっては非ASCII文字がASCII文字になることがあり、 注意が必要です。
[35] OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 2: Recalculated Formula (OpenFormula) Format ( 版) http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part2.html#LOWER
[36] OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 2: Recalculated Formula (OpenFormula) Format ( 版) http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part2.html#UPPER
[37] utf8_unicode_ci に対する日本の開発者の見解 - かみぽわーる ( 版) http://blog.kamipo.net/entry/2015/03/08/145045
[41] RFC 7790 - Mapping Characters for Classes of the Preparation, Enforcement, and Comparison of Internationalized Strings (PRECIS) ( 版) https://tools.ietf.org/html/rfc7790