Esto es principalmente una pregunta teórica sobre la que estoy muy curioso. (No estoy tratando de hacer esto codificando yo mismo ni nada, no estoy reinventando ruedas.)¿Cómo se configuran las cadenas en mayúsculas/minúsculas en Unicode?
Mi pregunta es cómo funciona la tabla de equivalencia en mayúscula/minúscula para Unicode.
Por ejemplo, si tuviera que hacer esto en ASCII, tomaría un carácter, y si cae dentro del rango [a-z], sumaría la diferencia entre A y a.
Si no cae en ese rango, tendría una pequeña tabla de equivalencias para los 10 o más caracteres acentuados más ñ. (O bien, podría tener una matriz de equivalencia completa con 256 entradas, la mayoría de las cuales sería la misma que la entrada)
Sin embargo, supongo que hay una mejor manera de especificar las equivalencias en Unicode, dado que hay cientos de miles de caracteres y que, teóricamente, se puede agregar un nuevo idioma o conjunto de caracteres (y espero que no sea necesario aplicar un parche a las ventanas cuando eso ocurra).
¿Windows tiene una enorme tabla de equivalencia codificada para cada personaje? ¿O cómo se implementa esto?
Una pregunta relacionada es cómo SQL Server implementa las consultas insensibles a mayúsculas y minúsculas insensibles a mayúsculas y minúsculas. ¿Tiene una tabla interna que dice que é ë É É È y Ë son todos equivalentes a "e"?
Eso no suena muy rápido a la hora de comparar cadenas.
¿Cómo accede a los índices rápidamente? ¿Ya indexa los valores convertidos a sus caracteres "base", que corresponden a la intercalación de ese campo?
¿Alguien conoce las partes internas de estas cosas?
¡Gracias!
Espero que necesite parchar ventanas si agregaron un nuevo juego de caracteres a unicode, pero que sería un parche de prioridad muy baja, ya que inicialmente nadie usaría esos caracteres. –
"una pequeña tabla de equivalencias para los 10 o más caracteres acentuados más ñ" - tendrá que entender que "pequeño" significa aproximadamente 100 veces más grande de lo que pensaba. –
No estoy del todo seguro de entender por qué todas las variantes de e que no puedo escribir con mi teclado son todas iguales a "e". Puedo entenderlo desde el punto de vista de una base de datos (para buscar ignorando acentos especiales) pero desde una perspectiva de lenguaje, todos son caracteres diferentes ... –