Dela via


Hur kultur påverkar strängar i Visual Basic

På den här hjälpsidan beskrivs hur Visual Basic använder kulturinformation för att utföra strängkonverteringar och jämförelser.

När du ska använda kulturspecifika strängar

Vanligtvis bör du använda kulturspecifika strängar för alla data som presenteras för och läss från användare och använda kulturvarianta strängar för programmets interna data.

Om ditt program till exempel ber användarna att ange ett datum som en sträng bör det förvänta sig att användarna formaterar strängarna enligt deras kultur, och programmet bör konvertera strängen på rätt sätt. Om ditt program sedan visar det datumet i användargränssnittet bör det visas i användarens kultur.

Men om programmet laddar upp datumet till en central server bör det formatera strängen enligt en specifik kultur för att förhindra förvirring mellan potentiellt olika datumformat.

Kulturkänsliga funktioner

Alla visual basic-strängkonverteringsfunktioner (förutom Str funktionerna och Val ) använder programmets kulturinformation för att se till att konverteringarna och jämförelserna är lämpliga för kulturen hos programmets användare.

Nyckeln till att använda strängkonverteringsfunktioner i program som körs på datorer med olika kulturinställningar är att förstå vilka funktioner som använder en specifik kulturinställning och vilka som använder den aktuella kulturinställningen. Observera att programmets kulturinställningar som standard ärvs från operativsystemets kulturinställningar. Mer information finns i Asc, , AscWChr, ChrW, Format, Hex, Octoch Typkonverteringsfunktioner.

Str Funktionerna (konverterar tal till strängar) och Val (konverterar strängar till tal) använder inte programmets kulturinformation när du konverterar mellan strängar och tal. I stället känner de bara igen perioden (.) som en giltig decimalavgränsare. De kulturellt medvetna analogerna av dessa funktioner är:

  • Konverteringar som använder den aktuella kulturen. Funktionerna CStr och Format konverterar ett tal till en sträng och CDbl funktionerna och CInt konverterar en sträng till ett tal.

  • Konverteringar som använder en specifik kultur. Varje talobjekt har en ToString(IFormatProvider) metod som konverterar ett tal till en sträng och en Parse(String, IFormatProvider) metod som konverterar en sträng till ett tal. Typen innehåller ToString(IFormatProvider) till exempel Double metoderna ochParse(String, IFormatProvider).

Mer information finns i Str och Val.

Använda en specifik kultur

Anta att du utvecklar ett program som skickar ett datum (formaterat som en sträng) till en webbtjänst. I det här fallet måste ditt program använda en specifik kultur för strängkonverteringen. För att illustrera varför bör du överväga resultatet av att använda datumets ToString() metod: Om ditt program använder den metoden för att formatera datumet 4 juli, 2005 returnerar den "7/4/2005 12:00:00 AM" när den körs med kulturen USA engelska (en-US), men den returnerar "04.07.2005 00:00:00" när den körs med den tyska kulturen (de-DE).

När du behöver utföra en strängkonvertering i ett specifikt kulturformat bör du använda klassen CultureInfo som är inbyggd i .NET Framework. Du kan skapa ett nytt CultureInfo objekt för en specifik kultur genom att skicka kulturens namn till CultureInfo konstruktorn. De kulturnamn som stöds visas på CultureInfo klassens hjälpsida.

Du kan också hämta en instans av den invarianta kulturen från CultureInfo.InvariantCulture egenskapen. Den invarianta kulturen är baserad på den engelska kulturen, men det finns vissa skillnader. Till exempel anger den invarianta kulturen en 24-timmarsklocka i stället för en 12-timmarsklocka.

Om du vill konvertera ett datum till kulturens sträng skickar CultureInfo du objektet till datumobjektets ToString(IFormatProvider) metod. Följande kod visar till exempel "07/04/2005 00:00:00", oavsett programmets kulturinställningar.

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

Kommentar

Datumliteraler tolkas alltid enligt den engelska kulturen.

Jämföra strängar

Det finns två viktiga situationer där strängjämförelser behövs:

  • Sortera data för visning för användaren. Använd åtgärder baserat på den aktuella kulturen så att strängarna sorteras korrekt.

  • Avgöra om två program interna strängar exakt matchar (vanligtvis i säkerhetssyfte). Använd åtgärder som bortser från den aktuella kulturen.

Du kan utföra båda typerna av jämförelser med funktionen Visual Basic StrComp . Ange det valfria Compare argumentet för att styra typen av jämförelse: Text för de flesta indata och utdata Binary för att fastställa exakta matchningar.

Funktionen StrComp returnerar ett heltal som anger relationen mellan de två jämförde strängarna baserat på sorteringsordningen. Ett positivt värde för resultatet anger att den första strängen är större än den andra strängen. Ett negativt resultat indikerar att den första strängen är mindre och noll anger likhet mellan strängarna.

' 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)

Du kan också använda .NET Framework-partnern för StrComp funktionen, String.Compare metoden. Det här är en statisk, överbelastad metod för bassträngsklassen. I följande exempel visas hur den här metoden används:

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

För finare kontroll över hur jämförelserna utförs kan du använda ytterligare överlagringar av Compare metoden. String.Compare Med metoden kan du använda comparisonType argumentet för att ange vilken typ av jämförelse som ska användas.

Värde för comparisonType argument Typ av jämförelse Användningsområde för
Ordinal Jämförelse baserat på strängarnas komponentbyte. Använd det här värdet när du jämför: skiftlägeskänsliga identifierare, säkerhetsrelaterade inställningar eller andra icke-språkliga identifierare där bytena måste matcha exakt.
OrdinalIgnoreCase Jämförelse baserat på strängarnas komponentbyte.

OrdinalIgnoreCase använder den invarianta kulturinformationen för att avgöra när två tecken endast skiljer sig åt i versaler.
Använd det här värdet när du jämför: skiftlägesokänsliga identifierare, säkerhetsrelaterade inställningar och data som lagras i Windows.
CurrentCulture eller CurrentCultureIgnoreCase Jämförelse baserad på strängarnas tolkning i den aktuella kulturen. Använd dessa värden när du jämför: data som visas för användaren, de flesta användarindata och andra data som kräver språklig tolkning.
InvariantCulture eller InvariantCultureIgnoreCase Jämförelse baserad på strängarnas tolkning i den invarianta kulturen.

Detta skiljer sig från Ordinal och OrdinalIgnoreCase, eftersom den invarianta kulturen behandlar tecken utanför dess godkända intervall som motsvarande invarianta tecken.
Använd endast dessa värden när du jämför bevarade data eller visar språkligt relevanta data som kräver en fast sorteringsordning.

Säkerhetsöverväganden

Om ditt program fattar säkerhetsbeslut baserat på resultatet av en jämförelse- eller skiftlägesändringsåtgärd bör åtgärden använda String.Compare metoden och skicka Ordinal eller OrdinalIgnoreCase för comparisonType argumentet.

Se även