Influenza delle impostazioni cultura sulle stringhe in Visual Basic

Questa pagina della Guida illustra in che modo Visual Basic usa le informazioni sulle impostazioni cultura per eseguire conversioni di stringhe e confronti.

Quando usare stringhe Culture-Specific

In genere, è consigliabile usare stringhe specifiche delle impostazioni cultura per tutti i dati presentati e letti dagli utenti e usare stringhe invarianti delle impostazioni cultura per i dati interni dell'applicazione.

Ad esempio, se l'applicazione chiede agli utenti di immettere una data come stringa, gli utenti devono formattare le stringhe in base alle impostazioni cultura e l'applicazione deve convertire la stringa in modo appropriato. Se l'applicazione presenta tale data nell'interfaccia utente, deve presentarla nelle impostazioni cultura dell'utente.

Tuttavia, se l'applicazione carica la data in un server centrale, deve formattare la stringa in base a impostazioni cultura specifiche, per evitare confusione tra formati di data potenzialmente diversi.

Funzioni Culture-Sensitive

Tutte le funzioni di conversione di stringhe di Visual Basic ,ad eccezione Str delle funzioni e Val , usano le informazioni sulle impostazioni cultura dell'applicazione per assicurarsi che le conversioni e i confronti siano appropriate per le impostazioni cultura dell'utente dell'applicazione.

La chiave per usare correttamente le funzioni di conversione delle stringhe nelle applicazioni eseguite nei computer con impostazioni cultura diverse consiste nel comprendere quali funzioni usano impostazioni cultura specifiche e quali usano l'impostazione delle impostazioni cultura correnti. Si noti che le impostazioni cultura dell'applicazione sono, per impostazione predefinita, ereditate dalle impostazioni cultura del sistema operativo. Per altre informazioni, vedere AscFunzioni di conversione dei tipi , OctHexAscWChrChrWFormate .

Le Str funzioni (converte i numeri in stringhe) e Val (converte le stringhe in numeri) non usano le informazioni sulle impostazioni cultura dell'applicazione durante la conversione tra stringhe e numeri. Riconoscono invece solo il punto (.) come separatore decimale valido. Gli analoghi con riconoscimento culturale di queste funzioni sono:

  • Conversioni che usano le impostazioni cultura correnti. Le CStr funzioni e Format converteno un numero in una stringa e le CDbl funzioni e CInt converteno una stringa in un numero.

  • Conversioni che usano impostazioni cultura specifiche. Ogni oggetto number ha un ToString(IFormatProvider) metodo che converte un numero in una stringa e un Parse(String, IFormatProvider) metodo che converte una stringa in un numero. Ad esempio, il Double tipo fornisce i ToString(IFormatProvider) metodi e Parse(String, IFormatProvider) .

Per altre informazioni, vedere Str e Val.

Uso di impostazioni cultura specifiche

Si supponga di sviluppare un'applicazione che invia una data (formattata come stringa) a un servizio Web. In questo caso, l'applicazione deve usare impostazioni cultura specifiche per la conversione di stringhe. Per illustrare il motivo, considerare il risultato dell'uso del metodo della ToString() data: se l'applicazione usa tale metodo per formattare la data 4 luglio, 2005, restituisce "7/4/2005 12:00:00 AM" quando viene eseguito con le impostazioni cultura inglese (en-US) Stati Uniti, ma restituisce "04.07.2005 00:00:00" quando viene eseguito con le impostazioni cultura tedesche (de-DE).

Quando è necessario eseguire una conversione di stringa in un formato di impostazioni cultura specifico, è necessario usare la CultureInfo classe incorporata in .NET Framework. È possibile creare un nuovo CultureInfo oggetto per impostazioni cultura specifiche passando il nome delle impostazioni cultura al CultureInfo costruttore. I nomi delle impostazioni cultura supportati sono elencati nella pagina della Guida della CultureInfo classe .

In alternativa, è possibile ottenere un'istanza delle impostazioni cultura invarianti dalla CultureInfo.InvariantCulture proprietà . Le impostazioni cultura invarianti si basano sulla cultura inglese, ma esistono alcune differenze. Ad esempio, le impostazioni cultura invarianti specificano un orologio di 24 ore anziché un orologio di 12 ore.

Per convertire una data nella stringa delle impostazioni cultura, passare l'oggetto CultureInfo al metodo dell'oggetto ToString(IFormatProvider) date. Il codice seguente, ad esempio, visualizza "07/04/2005 00:00:00", indipendentemente dalle impostazioni cultura dell'applicazione.

Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))

Nota

I valori letterali data vengono sempre interpretati in base alle impostazioni cultura inglesi.

Confronto di stringhe

Esistono due situazioni importanti in cui sono necessari confronti tra stringhe:

  • Ordinamento dei dati da visualizzare all'utente. Usare le operazioni basate sulle impostazioni cultura correnti in modo che le stringhe siano ordinate in modo appropriato.

  • Determinare se due stringhe interne dell'applicazione corrispondono esattamente (in genere a scopo di sicurezza). Usare operazioni che ignorano le impostazioni cultura correnti.

È possibile eseguire entrambi i tipi di confronto con la funzione Visual Basic StrComp . Specificare l'argomento facoltativo Compare per controllare il tipo di confronto: Text per la maggior parte dell'input e dell'output Binary per determinare le corrispondenze esatte.

La StrComp funzione restituisce un numero intero che indica la relazione tra le due stringhe confrontate in base all'ordinamento. Un valore positivo per il risultato indica che la prima stringa è maggiore della seconda stringa. Un risultato negativo indica che la prima stringa è più piccola e zero indica l'uguaglianza tra le stringhe.

' Defines variables.
Dim testStr1 As String = "ABCD"
Dim testStr2 As String = "abcd"
Dim testComp As Integer
' The two strings sort equally. Returns 0.
testComp = StrComp(testStr1, testStr2, CompareMethod.Text)
' testStr1 sorts before testStr2. Returns -1.
testComp = StrComp(testStr1, testStr2, CompareMethod.Binary)
' testStr2 sorts after testStr1. Returns 1.
testComp = StrComp(testStr2, testStr1, CompareMethod.Binary)

È anche possibile usare il partner .NET Framework della StrComp funzione , ovvero il String.Compare metodo . Si tratta di un metodo statico di overload della classe stringa di base. Nell'esempio seguente viene illustrato come viene usato questo metodo:

Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)

Per un controllo più corretto sul modo in cui vengono eseguiti i confronti, è possibile usare overload aggiuntivi del Compare metodo . Con il String.Compare metodo è possibile usare l'argomento comparisonType per specificare il tipo di confronto da usare.

Valore per comparisonType l'argomento Tipo di confronto Utilizzo
Ordinal Confronto basato sui byte dei componenti delle stringhe. Usare questo valore durante il confronto: identificatori con distinzione tra maiuscole e minuscole, impostazioni correlate alla sicurezza o altri identificatori non linguistici in cui i byte devono corrispondere esattamente.
OrdinalIgnoreCase Confronto basato sui byte dei componenti delle stringhe.

OrdinalIgnoreCase utilizza le informazioni sulle impostazioni cultura invarianti per determinare quando due caratteri differiscono solo in maiuscolo.
Usare questo valore durante il confronto: identificatori senza distinzione tra maiuscole e minuscole, impostazioni correlate alla sicurezza e dati archiviati in Windows.
CurrentCulture o CurrentCultureIgnoreCase Confronto basato sull'interpretazione delle stringhe nelle impostazioni cultura correnti. Usare questi valori durante il confronto: i dati visualizzati all'utente, la maggior parte dell'input dell'utente e altri dati che richiedono l'interpretazione linguistica.
InvariantCulture o InvariantCultureIgnoreCase Confronto basato sull'interpretazione delle stringhe nelle impostazioni cultura invarianti.

Questo valore è diverso da Ordinal e OrdinalIgnoreCaseperché le impostazioni cultura invarianti considerano i caratteri non compresi nell'intervallo accettato come caratteri invarianti equivalenti.
Usare questi valori solo quando si confrontano dati persistenti o si visualizzano dati linguistici pertinenti che richiedono un ordinamento fisso.

Considerazioni relative alla sicurezza

Se l'applicazione prende decisioni di sicurezza in base al risultato di un'operazione di confronto o di modifica del caso, l'operazione deve usare il String.Compare metodo e passare Ordinal o OrdinalIgnoreCase per l'argomento comparisonType .

Vedi anche