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 e confronti di stringhe.
Quando usare stringhe specifiche delle impostazioni cultura
In genere, è consigliabile usare stringhe specifiche delle impostazioni cultura per tutti i dati presentati e letti dagli utenti e usare stringhe con impostazioni cultura inglese non dipendenti da paese/area geografica per i dati interni dell'applicazione.
Ad esempio, se l'applicazione chiede agli utenti di immettere una data come stringa, dovrebbe prevedere che gli utenti formattino le stringhe in base alle proprie impostazioni cultura e l'applicazione dovrebbe 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, dovrà formattare la stringa in base a impostazioni cultura specifiche, per evitare confusione tra formati di data potenzialmente diversi.
Funzioni sensibili alle impostazioni cultura
Tutte le funzioni di conversione delle stringhe di Visual Basic (ad eccezione delle funzioni Str
e Val
) usano le informazioni relative alle impostazioni cultura dell'applicazione per assicurarsi che le conversioni e i confronti siano appropriati per le impostazioni cultura dell'utente dell'applicazione.
La chiave per usare correttamente le funzioni di conversione delle stringhe nelle applicazioni eseguite in computer con impostazioni cultura diverse consiste nel comprendere quali funzioni usano impostazioni cultura specifiche e quali usano le 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 Asc, AscW, Chr, ChrW, Format, Hex, Oct e Funzioni di conversione dei tipi.
Le funzioni Str
(converte i numeri in stringhe) e Val
(converte le stringhe in numeri) non usano le informazioni relative alle impostazioni cultura dell'applicazione durante la conversione tra stringhe e numeri. Riconoscono invece solo il punto (.) come separatore decimale valido. Gli analoghi con riconoscimento delle impostazioni cultura di queste funzioni sono:
Conversioni che usano le impostazioni cultura correnti. Le funzioni
CStr
eFormat
convertono un numero in una stringa e le funzioniCDbl
eCInt
convertono una stringa in un numero.Conversioni che usano impostazioni cultura specifiche. Ogni oggetto numero ha un metodo
ToString(IFormatProvider)
che converte un numero in una stringa e un metodoParse(String, IFormatProvider)
che converte una stringa in un numero. Ad esempio, il tipoDouble
fornisce i metodi ToString(IFormatProvider) 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 della stringa. Per illustrare il motivo, si consideri il risultato dell'utilizzo del metodo ToString() della 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 - Stati Uniti (en-US), ma restituisce "04.07.2005 00:00:00" quando viene eseguito con le impostazioni cultura Italiano - Italia (it-IT).
Quando è necessario eseguire una conversione di stringa in un formato di impostazioni cultura specifico, è necessario usare la classe CultureInfo
incorporata in .NET Framework. È possibile creare un nuovo oggetto CultureInfo
per impostazioni cultura specifiche passando il nome delle impostazioni cultura al costruttore CultureInfo. I nomi delle impostazioni cultura supportate sono elencati nella pagina della Guida della classe CultureInfo.
In alternativa, è possibile ottenere un'istanza delle impostazioni cultura inglese non dipendenti da paese/area geografica dalla proprietà CultureInfo.InvariantCulture. Le impostazioni cultura inglese non dipendenti da paese/area geografica sono basate sulle impostazioni cultura inglese, ma esistono alcune differenze. Ad esempio, le impostazioni cultura inglese non dipendenti da paese/area geografica specificano un formato ora basato su 24 ore anziché su 12 ore.
Per convertire una data nella stringa delle impostazioni cultura, passare l'oggetto CultureInfo al metodo dell'oggetto data ToString(IFormatProvider). Ad esempio, il codice seguente 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 inglese.
Confronto di stringhe
Esistono due situazioni importanti in cui sono necessari confronti tra stringhe:
Ordinamento dei dati da visualizzare all'utente. Usare 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 per scopi di sicurezza). Usare operazioni che ignorano le impostazioni cultura correnti.
È possibile eseguire entrambi i tipi di confronto con la funzione StrComp di Visual Basic. Specificare l'argomento Compare
facoltativo per controllare il tipo di confronto: Text
per la maggior parte delle operazioni di input e output e Binary
per determinare corrispondenze esatte.
La funzione StrComp
restituisce un 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 è minore 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 corrispondente .NET Framework della funzione StrComp
, ovvero il metodo String.Compare. Si tratta di un metodo statico di overload della classe stringa di base. L'esempio seguente illustra 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ù dettagliato sul modo in cui vengono eseguiti i confronti, è possibile usare overload aggiuntivi del metodo Compare. Con il metodo String.Compare è possibile usare l'argomento comparisonType
per specificare il tipo di confronto da usare.
Valore per l'argomento comparisonType |
Tipo di confronto | Quando utilizzare |
---|---|---|
Ordinal |
Confronto basato sui byte dei componenti delle stringhe. | Usare questo valore per il confronto di: 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 usa le informazioni impostazioni cultura inglese non dipendenti da paese/area geografica per determinare quando due caratteri presentano solo differenze tra maiuscole/minuscole. |
Usare questo valore per il confronto di: identificatori senza distinzione tra maiuscole e minuscole, impostazioni correlate alla sicurezza e dati archiviati in Windows. |
CurrentCulture oppure CurrentCultureIgnoreCase |
Confronto basato sull'interpretazione delle stringhe nelle impostazioni cultura correnti. | Usare questi valori per il confronto di: dati visualizzati all'utente, la maggior parte dell'input dell'utente e altri dati che richiedono interpretazione linguistica. |
InvariantCulture oppure InvariantCultureIgnoreCase |
Confronto basato sull'interpretazione delle stringhe nelle impostazioni cultura inglese non dipendenti da paese/area geografica. È diverso da Ordinal e OrdinalIgnoreCase perché le impostazioni cultura inglese non dipendenti da paese/area geografica considerano i caratteri al di fuori dell'intervallo consentito come caratteri inglesi non dipendenti da paese/area geografica equivalenti. |
Usare questi valori solo quando si confrontano dati persistenti o si visualizzano dati linguistici pertinenti che richiedono un ordinamento fisso. |
Security Considerations
Se l'applicazione prende decisioni di sicurezza in base al risultato di un confronto o di un'operazione di modifica di maiuscole/minuscole, l'operazione deve usare il metodo String.Compare e passare Ordinal
o OrdinalIgnoreCase
per l'argomento comparisonType
.