У меня вопрос о культуре инвариантов Windows.
Вкратце, мой вопрос:
существует ли какая-либо пара символов c1 и c2 такая, что:
ниже (c1, инвариант) = латиница ниже (c2, инвариант)
но
ниже (c1, инвариант)! = инвариант ниже (c2, инвариант)
Справочная информация:
Мне нужно хранить неизменную строчную строку (представляющую имя файла) внутри SQL Server Compact, который не поддерживает сопоставления инвариантов Windows.
В идеале я хотел бы сделать это без необходимости вытаскивать всю логику сравнения из базы данных в мое приложение.
Идея, с которой я столкнулся, заключалась в том, чтобы сохранить 2 версии всех имен файлов: одну, которая используется для отображения данных покупателю, и другую, которая используется для сравнения. Столбец сравнения будет преобразован в нижний регистр с использованием языкового стандарта Windows, а затем сохранен в базе данных.
Тем не менее, я не имею ни малейшего представления о том, какие отображения выполняет инвариантная культура, кроме того факта, что ее используют в окнах для сравнения имен файлов.
Мне интересно, возможно ли получить ложные срабатывания (или ложные отрицания) в результате этой схемы.
То есть можно ли создавать символы (ранее в нижнем регистре с использованием инвариантной культуры), которые сравниваются равными друг другу с использованием сортировки SQL-сервера, не учитывающей регистр букв латинского-общего-1, но не сравниваются равными друг другу при инвариантной культуре
Если это может произойти, то мое приложение может рассматривать 2 файла, которые, по мнению Windows, отличаются друг от друга. В конечном итоге это может привести к потере данных.
Примечание:
Мне известно, что в Windows возможно наличие файлов, чувствительных к регистру. Однако мне не нужно поддерживать эти сценарии.