Domanda

Ho una domanda circa la finestre cultura invarianti.

Sinteticamente, la mia domanda è:

Esiste alcun paio di personaggi c1, c2 e tale che:

inferiore (c1, invariante) = latin-general inferiore (c2, invariante)

ma

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

Sfondo:

ho bisogno di memorizzare una stringa di lettere minuscole invariante (che rappresenta un nome di file) all'interno di SQL Server Compact, che non supporta Windows collations invarianti.

Idealmente mi piacerebbe fare questo senza dover tirare tutta la mia logica di confronto dal database e nella mia app.

L'idea che avevo per risolvere questo è stato quello di memorizzare 2 versioni di tutti i nomi di file: uno che viene utilizzato per la visualizzazione dei dati del cliente, e un altro che viene utilizzato per eseguire il confronto. La colonna confronto verrebbe convertito in minuscolo utilizzando le finestre locale invariante prima di riporla nel database.

Comunque, io in realtà non hanno alcuna idea di che tipo di mappature della cultura invarianti fa, a parte il fatto che i suoi ciò che Windows utilizza per il confronto di nomi di file.

Mi chiedo se è possibile ottenere falsi positivi (o falsi negativi) come conseguenza di questo schema.

Cioè, posso produrre caratteri (precedentemente inferiore carter utilizzando le impostazioni cultura invarianti) che confrontano uguali tra loro utilizzando il latino-general-1 caso le regole di confronto del server insensibile SQL, ma non si confronta uguali tra loro sotto la cultura invarianti ?

Se questo può accadere, quindi la mia app potrebbe prendere in considerazione 2 file di Windows che pensa sono diversi come lo stesso. Questo potrebbe in ultima analisi, portare alla perdita di dati.

Nota:

Sono consapevole che è possibile avere i file sensibili casi su Windows. Non ho bisogno di sostenere questi scenari, tuttavia.

È stato utile?

Soluzione

Per guardando attraverso le risposte a questa domanda:

win32-file-name-confronto

che ho chiesto un po 'indietro.,

Ho trovato un legame indiretto alla pagina seguente:

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

Si suggerisce di utilizzare un confronto ordinale dopo una maiuscola invariante come il modo migliore di imitare ciò che fa il file system.

Quindi penso che se uso come "case sensitive, accento sensibili" regole di confronto nel database, e fare un "superiore" utilizzando il locale invariante prima di memorizzare i file che dovrei essere ok.

Qualcuno sa se ci sono problemi con questo?

Altri suggerimenti

perché non si converte i nomi dei file ASCII? Nella tua situazione può contenere nomi di file caratteri non ASCII?

Perché non URL-encode la rappresentazione utf8 byte del nome del file per ottenere una versione ASCII che può essere riconvertito in Unicode facilmente senza alcuna possibile perdita?

"Tuttavia, non ho davvero alcuna idea di che tipo di mappature della cultura invarianti fa, a parte il fatto che i suoi ciò che Windows utilizza per il confronto di nomi di file."

non ho pensato di Windows utilizzata la cultura invarianti quando si confrontano i nomi dei file. Per esempio, se la mia cultura è l'inglese allora posso nominare due file separati Turco & Turco, ma se la cultura di qualcuno è turca, allora spero di Windows non permetterà loro di farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top