C'est surtout une question théorique dont je suis très curieux. (Je n'essaie pas de le faire en le codant moi-même ou quoi que ce soit, je ne réinvente pas les roues.)Comment définir les chaînes en majuscules/minuscules dans Unicode?
Ma question est de savoir comment la table majuscule/minuscule d'équivalence fonctionne pour Unicode. Par exemple, si je devais le faire en ASCII, je prendrais un caractère, et s'il tombe avec la gamme [a-z], je ferais la somme de la différence entre A et a.
S'il ne tombe pas dans cette plage, j'aurais une petite table d'équivalence pour les 10 caractères accentués plus ñ. (Ou, je pourrais juste avoir un tableau d'équivalence complet avec 256 entrées, dont la plupart seraient les mêmes que l'entrée)
Cependant, je suppose qu'il y a une meilleure façon de spécifier les équivalences en Unicode, étant donné qu'il y a des centaines de milliers de caractères, et qu'en théorie, une nouvelle langue ou un ensemble de caractères peut être ajouté (et je m'attends à ce que vous n'ayez pas besoin de patcher les fenêtres quand cela arrive).
Windows a-t-il une énorme table d'équivalence codée en dur pour chaque caractère? Ou comment cela est-il mis en œuvre?
Une question connexe est de savoir comment SQL Server implémente les requêtes insensibles à la majuscule et insensible à la casse basées sur Unicode. A-t-il une table interne qui lui indique que E E È et Ë sont tous équivalents à "e"?
Cela ne sonne pas très vite quand il s'agit de comparer des chaînes.
Comment accède-t-il rapidement aux index? Est-ce qu'il indexe déjà les valeurs converties en leurs caractères "de base", correspondant au classement de ce champ?
Est-ce que quelqu'un connaît les internes pour ces choses?
Merci!
Je pense que vous aurez besoin de patcher les fenêtres si elles ont ajouté un nouveau jeu de caractères à unicode, mais que ce serait un patch de très faible priorité, car au départ, personne n'utiliserait ces caractères. –
"une petite table d'équivalence pour les 10 caractères accentués plus ñ" - vous devez comprendre que "petit" signifie environ 100 fois plus grand que vous pensiez que cela signifiait. –
Je ne suis pas tout à fait sûr que je comprends pourquoi toutes les variantes sur e que je ne peux pas taper avec mon clavier facilement tous égaux "e". Je peux le comprendre du point de vue de la base de données (pour la recherche en ignorant les accents spéciaux) mais d'un point de vue linguistique, ce sont tous des caractères différents ... –