Pregunta

Tengo una pregunta acerca de la referencia cultural de todos ventanas.

Sucintamente, mi pregunta es:

¿existe cualquier par de caracteres c1, y c2 tal que:

inferior (c1, invariante) = latino General inferior (c2, invariante)

y

inferior (c1, invaraint)! = invariante inferior (c2, invariante)

Antecedentes:

necesito para almacenar una cadena invariante en minúsculas (que representa un nombre de archivo) en el interior de SQL Server Compact, que no admite ventanas colaciones invariantes.

Lo ideal sería que me gustaría hacer esto sin tener que tirar toda mi lógica de comparación fuera de la base de datos y en mi aplicación.

La idea que tenía para resolver este era almacenar 2 versiones de todos los nombres de los archivos: uno que se utiliza para la visualización de datos para el cliente, y otro que se utiliza para realizar comparaciones. La columna de comparación sería convertido a minúsculas utilizando las ventanas local invariante antes de almacenarlos en la base de datos.

Sin embargo, realmente no tengo idea de qué tipo de asignaciones de la referencia cultural de todos hace, aparte del hecho de que sus lo que Windows utiliza para comparar los nombres de archivo.

Me pregunto si es posible obtener falsos positivos o falsos negativos () como resultado de este esquema.

Es decir, puedo producir caracteres (anteriormente inferior entubado utilizando la referencia cultural de todos) que comparan iguales entre sí mediante el Latin-1-general de la intercalación del servidor SQL insensible, pero no se comparan iguales entre sí bajo la referencia cultural de todos ?

Si esto puede suceder, entonces mi aplicación puede considerar 2 archivos que Windows piensa que son diferentes como siendo el mismo. Esto podría en última instancia conducir a la pérdida de datos.

Nota:

Soy consciente de que es posible tener archivos entre mayúsculas y minúsculas en Windows. No necesito a apoyar a los escenarios, sin embargo.

¿Fue útil?

Solución

Al mirar a través de las respuestas a esta pregunta:

win32-file-name- comparación

que pedí un tiempo atrás.,

He encontrado un vínculo indirecto la siguiente página:

http://msdn.microsoft.com/en-us/library /ms973919.aspx

Se sugiere el uso de una comparación ordinal después de una letra mayúscula invariante como la mejor manera de imitar lo que hace el sistema de archivos.

Así que creo que si uso como "mayúsculas y minúsculas acento sensible", de colación en la base de datos, y hacer un "superior" Uso de la invariante local antes de almacenar los archivos que debería estar bien.

¿Alguien sabe si hay algún problema con eso?

Otros consejos

¿Por qué no convertir los nombres de archivo en ASCII? En su situación pueden contener nombres de archivo de caracteres no ASCII?

¿Por qué no cifrar la URL de la representación de bytes UTF-8 del nombre de archivo para obtener una versión ASCII que se puede convertir de nuevo a Unicode fácilmente sin ninguna pérdida posible?

"Sin embargo, realmente no tengo idea de qué tipo de asignaciones de la referencia cultural de todos hace, aparte del hecho de que sus lo que Windows utiliza para comparar los nombres de archivo."

no pensé de Windows utiliza la referencia cultural invariable cuando se comparan los nombres de archivo. Por ejemplo, si mi cultura es Inglés entonces puede nombrar dos archivos separados turcos y turco, pero si la cultura de una persona es el turco entonces espero que Windows no permite hacer eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top