Modifiche di ordinamento NLS
Piattaforme interessate
Client - Windows XP, Windows Vista, Windows 7
Server - Windows Server 2003, Windows Server 2008, Windows Server 2008 R2
Impatto sulle funzionalità
Gravità - Alto
Frequenza - Bassa (poche app interessate, ma se interessata, sempre interrotta)
Descrizione
Le funzioni National Language Support (NLS) consentono alle applicazioni di supportare le diverse esigenze di lingua e impostazioni locali specifiche degli utenti in tutto il mondo. Le nuove versioni di Windows includono quasi invariabilmente le modifiche NLS. Questa modifica influisce sulle regole di confronto e sull'ordinamento e quindi sulle applicazioni con indici persistenti.
Una tabella delle regole di confronto include due numeri che identificano la versione (revisione): la versione definita e la versione NLS. Entrambe le versioni sono valori DWORD, costituiti da una versione principale e una versione secondaria. Il primo byte di un valore è riservato, i due byte successivi rappresentano la versione principale e l'ultimo byte rappresenta la versione secondaria. In termini esadecimali, il modello è 0xRRMMMMmm, dove R è uguale a Riservato, M uguale a principale e m è minore. Ad esempio, una versione principale di 3 con una versione secondaria di 4 è rappresentata come 0x304.
Per una versione principale, uno o più punti di codice cambiano in modo che l'applicazione debba ricompilare tutti i dati per i confronti da valida. Per una versione secondaria, non viene spostato nulla, ma i punti di codice vengono aggiunti. Per questo tipo di versione, l'applicazione deve eseguire di nuovo l'indicizzazione delle stringhe con valori precedentemente non eseguibili. Di seguito è riportato il significato dei numeri di versione in relazione alle modifiche dei dati nelle tabelle di eccezioni specifiche delle impostazioni locali e nelle tabelle predefinite:
NLSVersion Major : punti di codice modificati nelle tabelle specifiche delle impostazioni locali o "eccezioni"
NLSVersion Minor : aggiunta di nuovi punti di codice nelle tabelle specifiche delle impostazioni locali o "eccezioni"
DefinedVersion Major - Punti di codice modificati nella tabella predefinita
DefinedVersion Minor : aggiunta di nuovi punti di codice nella tabella predefinita
Ordinamento dei numeri di versione per le versioni rilasciate:
Sistema operativo | Versione | Versione (0xRRMMMMmm) |
---|---|---|
Windows XP | RTM/SP1/SP2/SP3/... | N/A - nessuna API GetNLSVersion() |
Windows Server 2003 | RTM/SP1 | 0x00 0000 01 |
Windows Vista | RTM/SP1 | 0x00 0405 00 |
Windows Server 2008 | RTM | 0x00 0501 00 /0x00 5001 00 |
Windows 7 | RTM | 0x00060100 |
Manifestazione
Le applicazioni (ad esempio i database) con indici persistenti che non controllano la versione NLS e re-index al momento della modifica della versione non riusciranno a ordinare correttamente o potrebbero non riuscire a fornire risultati richiesti.
Nel caso delle interfacce utente, gli elenchi ,ad esempio alfabetici, numerici, alfanumerici, simboli e così via, possono ordinare in modo errato.
Soluzione
L'applicazione può chiamare GetNLSVersionEx (Windows Vista o versione successiva) o GetNLSVersion (prima di Windows Vista) per recuperare sia la versione definita che la versione NLS per una tabella delle regole di confronto.
- GetNLSVersionEx:
Recupera informazioni sulla versione corrente di una funzionalità NLS specificata per le impostazioni locali specificate dal nome
Questa funzione consente a un'applicazione come Active Directory di determinare se una modifica NLS influisce sulle impostazioni locali usate per una determinata tabella di indice. In caso contrario, non è necessario ricompilare la tabella. Per altre informazioni, vedere Gestione delle impostazioni locali e delle informazioni sulla lingua.
Questa funzione supporta impostazioni locali personalizzate. Se lpLocaleName specifica impostazioni locali supplementari, i dati recuperati sono i dati corretti per l'ordine di confronto associato a tale impostazione locale supplementare.
Nota: Le versioni di Windows precedenti a Windows Vista non supportano GetNLSVersionEx.
- GetNLSVersion (uso per le applicazioni in esecuzione in versioni di Windows prima di Windows Vista):
Recupera informazioni sulla versione corrente di una funzionalità NLS specificata per le impostazioni locali specificate dall'identificatore
Questa funzione consente a un'applicazione come Active Directory di determinare se una modifica NLS influisce sull'identificatore delle impostazioni locali utilizzato per una determinata tabella di indice. In caso contrario, non è necessario ricompilare la tabella. Per altre informazioni, vedere Gestione delle impostazioni locali e delle informazioni sulla lingua.
Nota: Questa funzione recupera informazioni solo sulle impostazioni locali specificate dall'identificatore. La funzione GetNLSVersionEx supporta impostazioni locali, funzionalità e nomi RFC 4646 aggiuntivi. Tuttavia, le versioni di Windows precedenti a Windows Vista non supportano GetNLSVersionEx.
Le applicazioni destinate a essere eseguite solo in Windows Vista e versioni successive devono usare GetNLSVersionEx in preferenza per questa funzione.
GetNLSVersionEx offre un supporto valido per le impostazioni locali supplementari.
Test di compatibilità
Passaggi per indicare se è stata modificata una versione delle regole di confronto, ovvero è necessario ri-indicizzare):
Usare GetNLSVersionEx() per recuperare una struttura NLSVERSIONINFOEX durante l'indicizzazione originale dei dati.
Archiviare le proprietà seguenti con l'indice per identificare la versione: NLSVERSIONINFOEX.dwNLSVersion e NLSVERSIONINFOEX.dwDefinedVersion : queste due proprietà specificano insieme la versione della tabella di ordinamento in uso.
NLSVERSIONINFOEX.dwEffectiveId : specifica le impostazioni locali effettive dell'ordinamento. Le impostazioni locali personalizzate puntano all'ordinamento delle impostazioni locali in box.Quando si usa l'indice, usare GetNlsVersionEx() per individuare la versione dei dati.
Se una delle tre proprietà è stata modificata, i dati di ordinamento usati potrebbero restituire risultati diversi e qualsiasi indicizzazione potrebbe non riuscire a trovare i record.
Se si CONOSCE che i dati non contengono punti di codice Unicode non validi, ovvero tutte le stringhe restituite TRUE da una chiamata a IsNLSDefinedString(), è possibile considerarle uguali se SOLO il byte basso di dwNLSVersion e dwDefinedVersion è stato modificato (le versioni secondarie descritte in precedenza).
Collegamenti ad altre risorse
- Internazionalizzazione per le applicazioni di Windows
- Funzione GetNLSVersionEx
- Funzione GetNLSVersion
- Come stabilire se la versione delle regole di confronto è stata modificata