開発者ツール · テキスト比較
大文字と小文字の折りたたみは見た目より難しい: Unicode における「大文字と小文字を無視する」の意味
· 背景
テキストの差分 ユニコード 大文字と小文字の区別
ドットなしの i、シャープ s、最後のシグマを例として、大文字と小文字を無視することが ASCII では簡単で Unicode では微妙である理由と、大文字と小文字を区別しない比較でそれが何を意味するかを説明します。
イスタンブールの 2 つのスペルが一致しない理由 — 英語圏の開発者を驚かせる、トルコ語の点線大文字 I を含む現実世界の不一致から始まります
大文字と小文字を区別しない比較は、識別子、スクリプト、言語ルールが一致しない限り、普遍的に聞こえます。 ToolAcre の実際のルールは具体的です。大文字と小文字を無視するが選択されている場合、各行キーは空白文字の変換後に JavaScript `toLowerCase()` を受け取ります。次に、厳密な等価性により、結果の文字列が比較されます。
このメカニズムは見出しや通常のラベルに役立ちますが、その名前をロケールを意識した言語上の同等性まで拡張すべきではありません。 UI はロケールを収集せず、関数もロケールを提供しません。読者は、ケースに同一性や言語の意味が含まれる場合は必ず結果を検査する必要があります。
ASCII ケース: 単一ビット — 初期のツールの大文字と小文字を無視するフラグを簡単に作成する単純な大文字と小文字の関係を説明します。
ワークブックでは ASCII の場合を単一ビットの関係として説明していますが、ソースはビット演算や ASCII のみの分岐を実装していません。完全な行でプラットフォーム文字列メソッドを呼び出します。歴史的なエンコーディングの説明には、このリポジトリ以外のソースが必要です。
テスト スイートで証明されているように、基本的なラテン語テキストの場合、`Hello` と `hello` はオプションの下では等しくなります。このテストでは、すべての Unicode マッピングではなく、1 つの動作が確立されます。合格した英語の例をすべてのスクリプトに関する約束に変えることは避けてください。
実装は JavaScript を LowerCase に呼び出します。 ASCII 固有のビット操作は公開されません。
Unicode 大文字と小文字の折りたたみは、独自のデータおよびステータス ルールとの比較の概念です。 ToolAcre は、名前付き折りたたみライブラリを呼び出したり、文字列を正規化したり、Unicode バージョンを文書化したりしません。この実装を「フルケースフォールディング」と呼ぶと、機構が存在しないと主張することになります。
防御可能な説明は、現在の JavaScript エンジンを使用した小文字キーの比較です。元の行は変更されずに表示されます。切り出された文字列の長さまたはコード ポイントが異なる場合、その行は強制一致ではなく、削除と追加のままになります。
ToolAcre は、文書化された Unicode 大文字と小文字の分割操作ではなく、小文字のマッピングを実行します。
アウトラインでは、トルコ語の I、ドイツ語のシャープ s、およびギリシャ語のシグマと名付けられています。これらは、外部ソースの Unicode 記事の正当なトピックですが、このリポジトリには、それらの結果を保証するテーブルやテストが含まれていません。この記事では、正確なマッピングの宣言を意図的に避けています。
ID ルールを構築する前に、ターゲット環境で実際の値をテストし、信頼できる Unicode およびロケールのドキュメントを参照してください。視覚的に確認するための便利なチェックボックスは、ユーザー名コンパレーター、セキュリティ境界、または多言語照合エンジンになってはなりません。
名前付き言語の例外には外部 Unicode ソースが必要ですが、ここでは保証されません
`Release Notes` と `release notes` を比較します。厳密モードでは置換が報告されます。大文字と小文字を無視すると、行が同一であることが報告され、元の左側のテキストが表示されます。句読点やアクセントの変更を追加し、小文字だけではすべての違いが消去されないことを確認します。
この制御された例は、スクリプト固有の動作を解決するふりをせずにオプションを示しています。用語集を確認するときは、最初に厳密モードを実行し、大文字と小文字のみの行を記録します。後でオプションを切り替えて、大文字化ノイズをスペルまたは句読点の変更から分離します。
実用的な例: すべてのスクリプトに一般化せずに、通常のラテン語のバリアントをテストする
UI にはロケール セレクターは表示されず、`toLowerCase` は言語パラメーターを受け取りません。したがって、ドキュメントの対象言語に関係なく、同じ変換コードが実行されます。ルートは、行がトルコ語、ドイツ語、ギリシャ語、またはプログラミング識別子であるかどうかを知りません。
その不在は実際的な警告です。ロケールを認識した検索、並べ替え、または ID を行うには、これらの要件に基づいて設計された API を使用し、その動作を適切なデータで固定します。 Text diff は 2 つの文字列に対するレビュー担当者のレンズであり、グローバルな名前付けポリシーではありません。
この比較オプションではロケール パラメーターが指定されていません
この記事は、非ラテン語の等価性、正規化、照合順序、または混同しやすい文字に対するセキュリティを保証するものではありません。小文字では、2 つの名前が同じ人、製品、またはファイル システム オブジェクトを指すかどうかを答えることはできません。これらのシステムでは、まったく異なるケース ルールが適用される場合があります。
空白の無視は大文字と小文字を組み合わせることができますが、そうすることで消える範囲が広がります。一度に 1 つのオプションを切り替えて、原因を特定します。両方の結果が同じであれば、変換された回線キーが一致することだけがわかります。バイトの等価性やセマンティクスについては何も述べていません。
要点: 正確さのためではなく、利便性のために大文字と小文字を無視します。ToolAcre のテキスト比較のオプションが適切な場合と、結果を検査する必要がある場合についてまとめています。
大文字と小文字がプレゼンテーションのノイズであることがわかっている場合は、便宜上、大文字と小文字を無視してください。コード、パス、製品名、および大文字と小文字で値が区別される可能性のあるドメインについては、厳密モードを維持してください。より緩やかな結果を唯一のレコードにするのではなく、両方の出力を確認します。
ToolAcre の実装は、オプションの空白処理、次に JavaScript の小文字マッピング、そして厳密なラインキーの等価性を正確に記述するのに十分な透過性を持っています。この控えめな主張は、ソースがサポートできない広範な Unicode の約束よりも有益です。