Condividi tramite


Influenza delle impostazioni cultura sulle stringhe in Visual Basic

Aggiornamento: novembre 2007

In questa pagina della Guida viene illustrato come in Visual Basic le informazioni relative alle impostazioni cultura vengono utilizzate per eseguire conversioni e confronti tra le stringhe.

Quando utilizzare le stringhe specifiche delle impostazioni cultura

Generalmente è necessario utilizzare stringhe specifiche delle impostazioni cultura per tutti i dati presentati e letti dagli utenti e utilizzare le stringhe indipendenti dalle impostazioni cultura per i dati interni dell'applicazione.

Se ad esempio all'utente viene richiesto di immettere una data sotto forma di stringa, l'utente dovrebbe formattare le stringhe in base alle proprie impostazioni cultura e l'applicazione dovrebbe convertire la stringa in modo appropriato. Se l'applicazione presenta quindi quella data nell'interfaccia utente, dovrebbe presentarla nelle impostazioni cultura dell'utente.

Tuttavia se l'applicazione carica la data in un server centrale, la stringa dovrebbe essere formattata in base a impostazioni cultura specifiche, per impedire di far confusione tra formati della data potenzialmente diversi.

Funzioni dipendenti dalle impostazioni cultura

In Visual Basic tutte le funzioni per la conversione delle stringhe (ad eccezione delle funzioni Str e Val) utilizzano le informazioni relative alle impostazioni cultura dell'applicazione per accertarsi che le conversioni e i confronti siano appropriati per la cultura dell'utente dell'applicazione.

La chiave per l'utilizzo corretto delle funzioni per la conversione delle stringhe nelle applicazioni eseguite sui computer con diverse impostazioni cultura consiste nel comprendere quali funzioni utilizzano impostazioni cultura specifiche e quali utilizzano le impostazioni cultura correnti. Si noti che le impostazioni cultura dell'applicazione vengono, per impostazione predefinita, ereditate dalle impostazioni cultura del sistema operativo. Per ulteriori informazioni, vedere Funzioni Asc e AscW, Funzioni Chr e ChrW, Funzione Format, Funzione Hex (Visual Basic), Funzione Oct e Funzioni di conversione del tipo.

Le funzioni Str (conversione di numeri in stringhe) e Val (conversione di stringhe in numeri) non utilizzano le informazioni relative alle impostazioni cultura dell'applicazione per la conversione tra stringhe e numeri. Riconoscono invece solo il punto (.) come separatore decimale valido. Gli equivalenti sensibili alle impostazioni cultura di queste funzioni sono:

  • Conversioni che utilizzano le impostazioni cultura correnti. Le funzioni CStr e Format consentono di convertire un numero in una stringa, mentre le funzioni CDbl e CInt consentono di convertire una stringa in un numero.

  • Conversioni che utilizzano impostazioni cultura specifiche. In ogni oggetto numero esiste un metodo ToString(IFormatProvider) per la conversione di numeri in stringhe e un metodo Parse(String, IFormatProvider) per la conversione di stringhe in numeri. Nel tipo Double ad esempio sono presenti i metodi ToString(IFormatProvider) e Parse(String, IFormatProvider).

Per ulteriori informazioni, vedere Funzione Str e Funzione Val.

Utilizzo di impostazioni cultura specifiche

Si supponga di voler sviluppare un'applicazione per l'invio di una data (formattata come stringa) in un servizio Web. In questo caso, è necessario che l'applicazione utilizzi impostazioni cultura specifiche per la conversione delle stringhe. A titolo esplicativo considerare il risultato provocato dal metodo ToString() della data. Se l'applicazione utilizza quel metodo per la formattazione della data 4 luglio 2005, restituirà "7/4/2005" 12:00:00 AM" quando viene eseguita con le impostazioni cultura inglesi (Stati Uniti), ma restituisce "04.07.2005 00:00:00" quando viene eseguita con le impostazioni cultura tedesche (de-DE).

Per eseguire una conversione delle stringhe in un formato specifico delle impostazioni cultura, è necessario utilizzare la classe CultureInfo incorporta nel .NET Framework. È possibile creare un oggetto CultureInfo nuovo per impostazioni cultura specifiche, passando il nome delle impostazioni cultura al costruttore CultureInfo. I nomi delle impostazioni cultura supportati sono elencati nella pagine della guida della classe CultureInfo.

In alternativa, è possibile ottenere un'istanza delle impostazioni cultura invarianti dalla proprietà CultureInfo.InvariantCulture. Le impostazioni cultura invarianti corrispondono alle impostazioni cultura inglesi, ma ci sono delle differenze. Ad esempio, le impostazioni cultura invarianti utilizzano il formato a 24 ore anziché a 12 ore.

Per convertire una data nella stringa delle impostazioni cultura, passare l'oggetto CultureInfo al metodo ToString(IFormatProvider) dell'oggetto della data. Nel codice che segue, ad esempio, viene visualizzato "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 di data vengono sempre interpretati in base alle impostazioni cultura inglesi.

Confronto di stringhe

Esistono due situazioni importanti in cui sono necessari i confronti di strighe:

  • Ordinamento dei dati da visualizzare. Utilizzare operazioni basate sulle impostazioni cultura correnti in modo da permettere l'ordinamento appropriato delle stringhe.

  • Determinare la corrispondenza esatta di due stringhe interne all'applicazione (generalmente per motivi di protezione). Utilizzare operazioni che non tengono conto delle impostazioni cultura correnti.

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

La funzione StrComp restituisce un intero che indica la relazione tra le due stringhe confrontate in base ai criteri di ordinamento. Un risultato di valore positivo indica che la prima stringa è maggiore della seconda. Un risultato negativo indica che la prima stringa è minore, mentre zero indica l'eguaglianza delle 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 after TestStr2. Returns -1.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Binary)
' TestStr2 sorts before TestStr1. Returns 1.
TestComp = StrComp(TestStr2, TestStr1)

È possibile inoltre utilizzare il partner .NET Framework della funzione StrComp, il metodo String.Compare. Si tratta di un metodo della classe base stringa su cui avviene un overload statico. Nell'esempio seguente è illustrato l'utilizzo di questo metodo:

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

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

Valore per l'argomento comparisonType

Tipo di confronto

Quando utilizzarla

Ordinal

Confronto basato sui byte dei componenti della stringa.

Utilizzare questo valore per il confronto tra: identificatori con distinzione tra maiuscole e minuscole, impostazioni relativi alla protezione o altri identificatori non linguistici in cui i byte devono corrispondere in maniera esatta.

OrdinalIgnoreCase

Confronto basato sui byte dei componenti della stringa.

OrdinalIgnoreCase utilizza le informazioni delle impostazioni cultura invarianti per determinare se due carattari si differenziano solo per l'uso di maiuscole e minuscole.

Utilizzare questo valore per il confronto tra: identificatori senza distinzione tra maiuscole e minuscole, impostazioni relative alla protezione e dati memorizzati in Windows.

CurrentCulture or CurrentCultureIgnoreCase

Confronto in base all'interpretazione delle stringhe nelle impostazioni cultura correnti.

Utilizzare questi valori per il confronto tra: dati visualizzati per l'utente, la maggior parte dell'input dell'utente e altri dati che necessitano di un'interpretazione linguistica.

InvariantCulture or InvariantCultureIgnoreCase

Confronto in base all'interpretazione delle stringhe nelle impostazioni cultura invarianti.

Questa è diversa da Ordinal e OrdinalIgnoreCase, in quanto le impostazioni cultura invarianti trattano i caratteri al di fuori dell'intervallo accettato come caratteri invarianti equivalenti.

Utilizzare questi valori solo durante il confronto di dati persistenti o la visualizzazione di dati rilevanti da un punto di vista linguistico che richiedono un tipo di ordinamento fisso.

Considerazioni sulla protezione

Se l'applicazione prende decisioni di protezione in base al risultato di un confronto o un'operazione basata sul risultato di una modifica, l'operazione dovrebbe utilizzare il metodo String.Compare e passare Ordinal o OrdinalIgnoreCase per l'argomento comparisonType.

Vedere anche

Riferimenti

Funzioni di conversione del tipo

CultureInfo

Altre risorse

Introduzione alle stringhe in Visual Basic