[3] [[大文字]]と[[小文字]]を区別しない ([DFN[case‐insensitive]]) な[[比較]]は、 [[ASCII]] だけを対象としている間はおおよそ自明に定まりますが、[[ASCII]] より大きな[[文字集合]]を扱う場合には様々な可能性があり、処理も複雑化します。 [25] 区別しない[[比較]]は、等しいと判断される[[文字]](列)の組を定義する方法と、 [[case folding]] があります。 [DFN[[[case folding]]]] は、 対象となる[[文字列]]を[[比較]]のための[[正規形]]に変換することであり、 得られた[[文字列]]の単純な[[文字]]の列としての比較によって元々の[[文字列]]が同じかどうかを決定します。 * 大文字と小文字を区別しない比較方法のいろいろ [4] '''[[ASCII大文字・小文字不区別]]'''は、[[文字集合]]が [[Unicode]] であったとしても、 [[大文字]]と[[小文字]]の同一視を行う対象は [[ASCII]] [[文字]]だけに限定するもので、 実装も簡潔かつ高速です。[[HTML]] の構文など[[ラテン文字]]と少数の[[記号]]のみで記述される場面で有用で、 よく用いられています。 [5] '''[[互換性大文字・小文字不区別]]'''は、[[大文字]]と[[小文字]]の区別のある膨大な [[Unicode]] の[[文字]]について、[[大文字]]と[[小文字]]の区別を行わないものです。 [6] '''[[IRCにおける大文字と小文字]]''': [[IRC]] は、[[欧州]]で [[ISO/IEC 646の版]]のもとで開発された歴史的経緯ゆえ、 純粋に[[文字]]についてではなく、 ([[ASCII]] では[[記号]]となっているものも含めた) 特定の[[符号位置]]について[[大文字]]と[[小文字]]の関係が定義されています。 * 言語と大文字・小文字 [15] [[大文字]]と[[小文字]]の変換や比較は[[言語]]や[[地域]]によって違いがあります。 [[Unicode Standard]] では[[言語]]に依存しない[RUBYB[既定]@en[Default]]の方法を定義し、 必要に応じてそれを[DFN[[RUBYB[[[仕立て]]]@en[tailoring]]]]て[[言語]]や環境に合ったものにカスタマイズして良いこととしています。 [REFS[ - [16] ]REFS] [17] [[言語]]依存の[[大文字]]と[[小文字]]の変換の具体例として、 [[Unicode Standard]] [SRC[>>16]] には次のものが挙げられています。 [FIG[ - [18] [[トルコ語]]における [CODE(char)[[[I]]]] - [19] [[リトアニア語]]における[[アクセント]]つき [CODE(char)[[[i]]]] - [20] [[オランダ語]]における [CODE(char)[[[IJ]]]] の [[titlecase]] 化 - [21] [[アクセント]]つき[[ギリシャ文字]]の[[大文字]] 化 - [22] [[アポストロフィ]]など [[caseless]] な文字を含む場合の2文字目以降の [[titlecase]] 化 - [23] [CODE(charname)@en[[[LATIN SMALL LETTER SHARP S]]]] の[[大文字]]化 ]FIG] [24] このうち >>18 と >>19 については [[Unicode Character Database]] の [[SpecialCasing.txt]] に情報が含まれています。 * 歴史 [11] [[Web]] では当初[[大文字]]と[[小文字]]の比較をどう行うか明確に定義してこなかったため、 実装によって比較の方法が異なっていたり、場面によって異なっていたりすることもありました。 しかし現在では原則として[[ASCII大文字・小文字不区別]]な比較を行うように [[HTML]]、[[DOM]]、 [[CSS]] などすべて共通化されていて、ごく一部でのみ[[互換性大文字・小文字不区別]]が使われています。 ** 大文字・小文字不区別文字列比較算法 [7] [[HFS Plus]] の[[ファイル名]]では[DFN[[RUBYB[[[大文字・小文字不区別文字列比較算法]]]@en[Case-Insensitive String Comparison Algorithm]]]] ([DFN[[[FastUnicodeCompare]]]]) が使用されています。 *** 仕様書 [REFS[ - [10] [CITE[Technical Note TN1150: HFS Plus Volume Format]] ([TIME[2014-03-30 10:39:00 +09:00]] 版) -- [8] [DEL[[CITE[Technical Note TN1150: HFS Plus Volume Format]] ]] ]REFS] *** Unicode の版 [9] [[大文字]]・[[小文字]]の表は >>8 で配布されています。 [[Unicode]] の版は明記されておらず、 [[Unicode]] の拡張に合わせて更新されている形跡は見当たりません。 ** 古い HTML 5 の定義 [1] [[Web Forms 2.0]] で[[比較]]に[DFN[[RUBYB[[[大文字]]・[[小文字]]を区別しない]@en[case‐insensitive]]]]とき、 [[比較]]の際には [[Unicode]] で規定された [[case folding]] を実行'''[[しなければなりません]]'''。 ;; [2] この定義は後に改められ、現在の [[HTML]] では[[ASCII大文字・小文字不区別]]または[[互換性大文字・小文字不区別]]を使っています。 * セキュリティー [14] ほとんどの[[文字]]は[[ASCII]]内、[[非ASCII]]内で[[大文字]]と[[小文字]]の変換・比較が行われますが、 一部の[[文字]]は比較方法によっては[[非ASCII文字]]が[[ASCII文字]]になることがあり、 注意が必要です。 [REFS[ - [12] [CITE@en[Charinfo — "İ"]] ([TIME[2014-03-30 10:50:27 +09:00]] 版) - [13] [CITE@en[Charinfo — "ı"]] ([TIME[2014-03-30 10:50:43 +09:00]] 版) ]REFS] * メモ