Как установить строки в верхний / нижний регистр в Юникоде?
Это в основном теоретический вопрос, который мне просто очень интересен. (Я не пытаюсь сделать это, кодируя это сам или что-то, я не изобретаю колеса.)
Мой вопрос заключается в том, как прописная / строчная таблица эквивалентности работает для Unicode.
Например, если бы мне пришлось сделать это в ASCII, я бы взял символ, и если он выпал бы в пределах диапазона [a-z], я бы суммировал разницу между A и a.
Если он не попадает в этот диапазон, у меня будет небольшая таблица эквивалентности для 10 или около того акцентированных символов плюс -. (Или я мог бы просто иметь массив полной эквивалентности с 256 записями, большинство из которых были бы такими же, как входные)
Тем не менее, я предполагаю, что есть лучший способ задания эквивалентностей в Юникоде, учитывая, что существуют сотни тысяч символов, и что теоретически можно добавить новый язык или набор символов (и я ожидаю, что вы не нужно будет исправлять окна, когда это произойдет).
Есть ли в Windows огромная жестко закодированная таблица эквивалентности для каждого символа? Или как это реализовано?
Смежный вопрос заключается в том, как SQL Server реализует Unicode-нечувствительные к регистру и нечувствительные к регистру запросы. Есть ли у него внутренняя таблица, которая сообщает, что все é è E E É и equivalent эквивалентны «e»?
Это звучит не очень быстро, когда дело доходит до сравнения строк.
Как быстро получить доступ к индексам? Индексирует ли уже значения, преобразованные в их «базовые» символы, соответствующие сопоставлению этого поля?
Кто-нибудь знает внутренности для этих вещей?
Спасибо!