Delen via


Hoe cultuur van invloed is op tekenreeksen in Visual Basic

Op deze Help-pagina wordt beschreven hoe Visual Basic cultuurgegevens gebruikt om tekenreeksconversies en vergelijkingen uit te voeren.

Wanneer cultuurspecifieke tekenreeksen gebruiken

Normaal gesproken moet u cultuurspecifieke tekenreeksen gebruiken voor alle gegevens die worden gepresenteerd aan en gelezen door gebruikers, en cultuur-invariante tekenreeksen gebruiken voor de interne gegevens van uw toepassing.

Als uw toepassing bijvoorbeeld gebruikers vraagt een datum in te voeren als een tekenreeks, moeten gebruikers verwachten dat ze de tekenreeksen opmaken op basis van hun cultuur en dat de toepassing de tekenreeks op de juiste manier moet converteren. Als uw toepassing die datum vervolgens weergeeft in de gebruikersinterface, moet deze worden weergegeven in de cultuur van de gebruiker.

Als de toepassing echter de datum uploadt naar een centrale server, moet deze de tekenreeks opmaken op basis van één specifieke cultuur, om verwarring tussen mogelijk verschillende datumnotaties te voorkomen.

Cultuurgevoelige functies

Alle visual Basic-functies voor tekenreeksconversie (met uitzondering van de Str en Val functies) gebruiken de cultuurinformatie van de toepassing om ervoor te zorgen dat de conversies en vergelijkingen geschikt zijn voor de cultuur van de gebruiker van de toepassing.

De sleutel voor het gebruik van tekenreeksconversiefuncties in toepassingen die worden uitgevoerd op computers met verschillende cultuurinstellingen is om te begrijpen welke functies een specifieke cultuurinstelling gebruiken en welke de huidige cultuurinstelling gebruiken. U ziet dat de cultuurinstellingen van de toepassing standaard worden overgenomen van de cultuurinstellingen van het besturingssysteem. Zie functies voor conversie van typen voor meer informatie, zie , , , , , , Hex, en Octtypeconversiefuncties. FormatChrWChrAscWAsc

De Str functies (converteert getallen naar tekenreeksen) en Val (converteert tekenreeksen naar getallen) gebruiken de cultuurgegevens van de toepassing niet bij het converteren tussen tekenreeksen en getallen. In plaats daarvan herkennen ze alleen de punt (.) als een geldig decimaalteken. De cultureel bewuste analogen van deze functies zijn:

  • Conversies die gebruikmaken van de huidige cultuur. De CStr functies converteren Format een getal naar een tekenreeks en de CDbl functies CInt converteren een tekenreeks naar een getal.

  • Conversies die een specifieke cultuur gebruiken. Elk getalobject heeft een ToString(IFormatProvider) methode waarmee een getal wordt geconverteerd naar een tekenreeks en een Parse(String, IFormatProvider) methode waarmee een tekenreeks wordt geconverteerd naar een getal. Het type biedt bijvoorbeeld Double de ToString(IFormatProvider) en Parse(String, IFormatProvider) methoden.

Zie voor meer informatie Str en Val.

Een specifieke cultuur gebruiken

Stel dat u een toepassing ontwikkelt waarmee een datum (opgemaakt als een tekenreeks) naar een webservice wordt verzonden. In dit geval moet uw toepassing een specifieke cultuur gebruiken voor de tekenreeksconversie. Als u wilt laten zien waarom, kunt u het resultaat van het gebruik van de methode van de datum ToString() overwegen: als uw toepassing die methode gebruikt om de datum 4 juli op te maken, 2005 retourneert "7/4/2005 12:00:00 am" wanneer het wordt uitgevoerd met de Verenigde Staten Engelse (en-US) cultuur, maar het retourneert "04.07.2005 00:00:00" wanneer deze wordt uitgevoerd met de Duitse (de-DE) cultuur.

Wanneer u een tekenreeksconversie in een specifieke cultuurindeling moet uitvoeren, moet u de CultureInfo klasse gebruiken die is ingebouwd in .NET Framework. U kunt een nieuw CultureInfo object voor een specifieke cultuur maken door de naam van de cultuur door te geven aan de CultureInfo constructor. De ondersteunde cultuurnamen worden weergegeven op de help-pagina van de CultureInfo klas.

U kunt ook een exemplaar van de invariante cultuur van de CultureInfo.InvariantCulture eigenschap ophalen. De invariante cultuur is gebaseerd op de Engelse cultuur, maar er zijn enkele verschillen. De invariante cultuur geeft bijvoorbeeld een 24-uurs klok op in plaats van een 12-uurs klok.

Als u een datum wilt converteren naar de tekenreeks van de cultuur, geeft u het CultureInfo object door aan de methode van ToString(IFormatProvider) het datumobject. In de volgende code wordt bijvoorbeeld '07/04/2005 00:00:00' weergegeven, ongeacht de cultuurinstellingen van de toepassing.

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

Notitie

Letterlijke datums worden altijd geïnterpreteerd volgens de Engelse cultuur.

Tekenreeksen vergelijken

Er zijn twee belangrijke situaties waarin tekenreeksvergelijkingen nodig zijn:

  • Gegevens sorteren om weer te geven aan de gebruiker. Gebruik bewerkingen op basis van de huidige cultuur, zodat de tekenreeksen op de juiste manier worden gesorteerd.

  • Bepalen of twee toepassingsinterwendige tekenreeksen exact overeenkomen (meestal voor beveiligingsdoeleinden). Gebruik bewerkingen die de huidige cultuur negeren.

U kunt beide typen vergelijkingen uitvoeren met de functie Visual Basic StrComp . Geef het optionele Compare argument op om het type vergelijking te bepalen: Text voor de meeste invoer en uitvoer Binary voor het bepalen van exacte overeenkomsten.

De StrComp functie retourneert een geheel getal dat de relatie aangeeft tussen de twee vergeleken tekenreeksen op basis van de sorteervolgorde. Een positieve waarde voor het resultaat geeft aan dat de eerste tekenreeks groter is dan de tweede tekenreeks. Een negatief resultaat geeft aan dat de eerste tekenreeks kleiner is en nul geeft gelijkheid aan tussen de tekenreeksen.

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

U kunt ook de .NET Framework-partner van de StrComp functie, de String.Compare methode, gebruiken. Dit is een statische, overbelaste methode van de basisreeksklasse. In het volgende voorbeeld ziet u hoe deze methode wordt gebruikt:

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

Voor een nauwkeurigere controle over hoe de vergelijkingen worden uitgevoerd, kunt u extra overbelastingen van de Compare methode gebruiken. Met de String.Compare methode kunt u het comparisonType argument gebruiken om op te geven welk type vergelijking u wilt gebruiken.

Waarde voor comparisonType argument Type vergelijking Wanneer gebruiken
Ordinal Vergelijking op basis van de componentbytes van tekenreeksen. Gebruik deze waarde bij het vergelijken: hoofdlettergevoelige id's, beveiligingsinstellingen of andere niet-taalkundige id's waarbij de bytes exact moeten overeenkomen.
OrdinalIgnoreCase Vergelijking op basis van de componentbytes van tekenreeksen.

OrdinalIgnoreCase gebruikt de invariante cultuurgegevens om te bepalen wanneer twee tekens alleen in hoofdlettergebruik verschillen.
Gebruik deze waarde bij het vergelijken van: niet-hoofdlettergevoelige id's, beveiligingsinstellingen en gegevens die zijn opgeslagen in Windows.
CurrentCulture of CurrentCultureIgnoreCase Vergelijking op basis van de interpretatie van tekenreeksen in de huidige cultuur. Gebruik deze waarden bij het vergelijken: gegevens die worden weergegeven aan de gebruiker, de meeste gebruikersinvoer en andere gegevens waarvoor taalkundige interpretatie is vereist.
InvariantCulture of InvariantCultureIgnoreCase Vergelijking op basis van de interpretatie van tekenreeksen in de invariante cultuur.

Dit verschilt van de Ordinal en OrdinalIgnoreCase, omdat de invariante cultuur tekens buiten het geaccepteerde bereik behandelt als gelijkwaardige invariante tekens.
Gebruik deze waarden alleen wanneer u persistente gegevens vergelijkt of taalkundige relevante gegevens weergeeft waarvoor een vaste sorteervolgorde is vereist.

Beveiligingsoverwegingen

Als uw toepassing beveiligingsbeslissingen neemt op basis van het resultaat van een vergelijkings- of casewijzigingsbewerking, moet de bewerking de String.Compare methode gebruiken en het comparisonType argument doorgeven Ordinal of OrdinalIgnoreCase doorgeven.

Zie ook