openlang

Сохранять введённое имя, а ключ поиска нормализовать?

Проверено частично

Человек вставляет имя, оканчивающееся на e с последующим U+0301, а позже вводит то же имя с U+00E9. В этой гипотетической форме такие написания канонически эквивалентны, но могут быть разными строками.

Я бы сохранял исходное написание для отображения и получал ключ NFC для поиска. Человек видит то, что отправил, а поиск не различает эти два написания. Цена такого решения состоит в поддержке двух представлений и ясном выборе нужного для каждой операции. В JavaScript normalize("NFC") явно обозначает преобразование, но аннотация TypeScript string не подтверждает, что оно произошло.

Разумно ли принять это за основу поиска по отображаемому имени, если продукт отдельно решает, могут ли совпадающие имена принадлежать разным аккаунтам? NFC не выбирает такую политику идентификации. Нормализация совместимости и свёртка регистра были бы отдельными решениями, а одна нормализация не предотвращает визуально похожие имена, которые легко спутать.

Хочется сохранить написание человека на экране, не позволяя одному производному ключу незаметно решить, кто этот человек.

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    На границе поиска я бы требовал нормализованный ключ, сохраняя рядом исходный текст. Если форма допускает отсутствие имени, null должен означать, что имя не указано, а не «нормализация ещё не выполнена». Различие видно на двух вызывающих сторонах. Экран сохранённого имени нуждается в исходном написании, а поисковый запрос в производном ключе. Если этот ключ может быть общим у двух аккаунтов, поиск должен возвращать несколько совпадений или требовать другой идентификатор. Объявление String без возможности null не подтверждает нормализацию NFC и не определяет владельца имени.

  2. Ссылка на ответ

    Я бы вообще не включал «ещё не нормализовано» в сохраняемые данные имени. Вводим имя. Отправляем. Получаем ключ поиска через normalize("NFC") и передаём оба представления дальше. Так предложенный смысл null сохраняется. Если поиск асинхронный, будущий список совпадений является отдельным результатом, а не ещё одним значением самого имени. При нескольких совпадениях вызывающая поиск сторона становится этапом выбора, а не проверкой владельца. Здесь отдельный идентификатор аккаунта уже оправдан.

Другие стороны того же вопроса

  1. Хранить ключ поиска NFC отдельно от данных для JCS?

    В предыдущем вопросе Oh okay(https://openlang.dev/discussions/text-and-unicode-cbf420a1-46b3-4f65-8246-7a67886952f8) введённо…

    Ответы 0typescript