Русский

Инструменты разработчика · Сравнение текста

Складывание регистра сложнее, чем кажется: что означает «игнорировать регистр» в Юникоде

· Фон

разница текста Юникод чувствительность к регистру

Клавиши строк верхнего и нижнего регистра сходятся, а одна исключительная форма остается отдельной.
Оригинальная векторная иллюстрация ToolAcre

Объясняет, почему игнорирование регистра является тривиальным для ASCII и тонким для Unicode, с i без точки, диезом s и конечной сигмой в качестве примеров, и что это означает для любого сравнения без учета регистра.

Почему два варианта написания Стамбула могут не совпадать — начинается с реального несоответствия, связанного с турецкой заглавной буквой I, которое удивляет англоговорящих разработчиков.

Сравнение без учета регистра кажется универсальным до тех пор, пока идентификаторы, сценарии и языковые правила не расходятся во мнениях. Фактическое правило ToolAcre является конкретным: когда выбран «Игнорировать регистр», каждый ключ строки получает JavaScript `toLowerCase()` после любого преобразования пробелов. Затем строгое равенство сравнивает полученные строки.

Этот механизм полезен для заголовков или обычных меток, но его имя не следует расширять до лингвистического равенства с учетом локали. Пользовательский интерфейс не собирает локаль, и функция ее не предоставляет. Читателям следует проверять результаты всякий раз, когда случай имеет идентичное или языковое значение.

ASCII регистр: один бит — объясняет простую взаимосвязь верхнего и нижнего регистра, которая упрощала использование флагов игнорирования регистра в ранних инструментах.

В книге случай ASCII описан как однобитовая связь, но в исходном коде не реализована битовая арифметика или ветвь, предназначенная только для ASCII. Он вызывает метод строки платформы для полной строки. Объяснения исторического кодирования требуют источников за пределами этого репозитория.

Для основного текста на латинице `Hello` и `hello` при этой опции становятся равными, как показывает набор тестов. Этот тест устанавливает одно поведение, а не каждое сопоставление Unicode. Не превращайте мимолетный пример английского языка в обещание относительно всех сценариев.

Реализация вызывает JavaScript toLowerCase; он не предоставляет битовую операцию, специфичную для ASCII

Свертывание регистра в Юникоде — это концепция сравнения с собственными правилами данных и статуса. ToolAcre не вызывает именованную библиотеку свертывания, не нормализует строки и не документирует версию Unicode. Назвать эту реализацию «полным складыванием корпуса» означало бы потребовать отсутствующего механизма.

Защищенным описанием является сравнение ключей в нижнем регистре с использованием текущего механизма JavaScript. Исходные строки остаются неизменными для отображения. Если опущенные строки различаются по длине или кодовым точкам, строка остается удалением и добавлением, а не принудительным сопоставлением.

ToolAcre выполняет сопоставление нижнего регистра, а не документированную операцию свертывания регистра в Юникоде.

В контуре названы турецкое I, немецкое диез и греческая сигма. Это законные темы для статьи в Юникоде из внешнего источника, но в этом репозитории нет таблиц или тестов, гарантирующих результаты для них. В этой статье намеренно избегается объявление точных сопоставлений.

Прежде чем создавать правила идентификации, проверьте фактические значения в целевой среде и обратитесь к авторитетной документации по Unicode и языковым стандартам. Удобный флажок для визуального просмотра не должен превращаться в средство сравнения имен пользователей, границу безопасности или многоязычный механизм сортировки.

Исключения для именованных языков требуют внешних источников Юникода и здесь не гарантируются.

Сравните `Release Notes` с `release notes`. Строгий режим сообщает о замене; Игнорировать регистр сообщает, что строка идентична, и отображает исходный левый текст. Добавьте пунктуацию или изменение ударения и обратите внимание, что использование строчных букв само по себе не стирает все различия.

Этот контролируемый пример демонстрирует эту опцию, не претендуя на урегулирование поведения, специфичного для сценария. При просмотре глоссария сначала запустите строгий режим и записывайте строки только с регистром. Включите эту опцию позже, чтобы отделить шум заглавных букв от изменений орфографии или пунктуации.

Рабочий пример: протестируйте обычные латинские варианты без обобщения на каждый алфавит.

В пользовательском интерфейсе не отображается переключатель языкового стандарта, а `toLowerCase` не получает параметр языка. Следовательно, один и тот же код преобразования выполняется независимо от предполагаемого языка документа. Маршрут не знает, является ли линия турецкой, немецкой, греческой или программным идентификатором.

Это отсутствие является практическим предупреждением. Для поиска, сортировки или идентификации с учетом локали используйте API, разработанный с учетом этих требований, и закрепите его поведение с соответствующими данными. Text diff — это взгляд рецензента на две строки, а не глобальная политика именования.

В этом параметре сравнения не указан параметр локали.

Эта статья не обещает нелатинской эквивалентности, нормализации, сопоставления или защиты от запутанных символов. Использование строчных букв не может ответить на вопрос, относятся ли два имени к одному и тому же человеку, продукту или объекту файловой системы. Эти системы могут применять совершенно разные правила рассмотрения дел.

Игнорировать пробелы можно комбинировать с регистром, но это расширяет то, что исчезает. Переключайте один параметр за раз, чтобы определить причину. Результат, идентичный в обоих случаях, говорит только о том, что преобразованные ключи строк совпадают; здесь ничего не говорится о равенстве байтов или семантике.

Вывод: игнорируйте регистр для удобства, а не для корректности — подводит итог, когда опция в сравнении текста ToolAcre подходит и когда проверять результаты.

Используйте «Игнорировать регистр» для удобства, когда известно, что использование заглавных букв является шумом представления. Сохраняйте строгий режим для кода, путей, названий продуктов и любого домена, где значения могут различаться по регистру. Просмотрите оба результата вместо того, чтобы делать более слабый результат единственной записью.

Реализация ToolAcre достаточно прозрачна, чтобы точно указать: необязательную обработку пробелов, затем сопоставление нижнего регистра JavaScript, а затем строгое равенство ключей строк. Это скромное утверждение более полезно, чем обширное обещание Unicode, которое источник не может поддержать.