Auswirkungen der Kultur auf Zeichenfolgen in Visual Basic

Auf dieser Hilfeseite wird erläutert, wie Visual Basic Kulturinformationen verwendet, um Zeichenfolgenkonvertierungen und -vergleiche durchzuführen.

Wann sollten kulturspezifische Zeichenfolgen verwendet werden?

In der Regel sollten Sie kulturspezifische Zeichenfolgen für alle Daten verwenden, die Benutzer*innen angezeigt und von diesen gelesen werden, und kulturunabhängige Zeichenfolgen für die internen Daten Ihrer Anwendung.

Wenn Ihre Anwendung beispielsweise Benutzer*innen auffordert, ein Datum als Zeichenfolge einzugeben, sollte sie erwarten, dass Benutzer*innen die Zeichenfolgen ihrer Kultur entsprechend formatieren, und die Anwendung sollte die Zeichenfolge entsprechend konvertieren. Wenn Ihre Anwendung dieses Datum dann in der Benutzeroberfläche angibt, sollte es in der Kultur des Benutzers angezeigt werden.

Wenn die Anwendung das Datum jedoch auf einen zentralen Server hochlädt, sollte sie die Zeichenfolge gemäß einer bestimmten Kultur formatieren, um Verwechslungen zwischen potenziell unterschiedlichen Datumsformaten zu vermeiden.

Kulturabhängige Funktionen

Alle Visual Basic-Funktionen für die Zeichenfolgenkonvertierung (mit Ausnahme der Funktionen Str und Val) verwenden die Kulturinformationen der Anwendung, um sicherzustellen, dass die Konvertierungen und Vergleiche für die Kultur des Benutzers der Anwendung geeignet sind.

Der Schlüssel zur erfolgreichen Verwendung von Zeichenfolgenkonvertierungsfunktionen in Anwendungen, die auf Computern mit unterschiedlichen Kultureinstellungen ausgeführt werden, besteht darin, zu verstehen, welche Funktionen eine bestimmte Kultureinstellung verwenden, und welche die aktuelle Kultureinstellung verwenden. Beachten Sie, dass die Anwendung ihre Kultureinstellungen standardmäßig von den Kultureinstellungen des Betriebssystems erbt. Weitere Informationen finden Sie unter Asc, AscW, Chr, ChrW, Format, Hex, Oct und Funktionen für die Typkonvertierung.

Die Funktionen Str (konvertiert Zahlen in Zeichenfolgen) und Val (konvertiert Zeichenfolgen in Zahlen) verwenden beim Konvertieren zwischen Zeichenfolgen und Zahlen nicht die Kulturinformationen der Anwendung. Stattdessen erkennen sie nur den Punkt (.) als gültiges Dezimaltrennzeichen. Die kulturbewussten Analogien dieser Funktionen sind:

  • Konvertierungen, die die aktuelle Kultur verwenden. Die Funktionen CStr und Format konvertieren eine Zahl in eine Zeichenfolge, und die Funktionen CDbl und CInt konvertieren eine Zeichenfolge in eine Zahl.

  • Konvertierungen, die eine bestimmte Kultur verwenden. Jedes Zahlenobjekt verfügt über eine ToString(IFormatProvider)-Methode, die eine Zahl in eine Zeichenfolge konvertiert, und eine Parse(String, IFormatProvider)-Methode, die eine Zeichenfolge in eine Zahl konvertiert. Beispielsweise stellt der Double-Typ die Methoden ToString(IFormatProvider) und Parse(String, IFormatProvider) zur Verfügung.

Weitere Informationen finden Sie unter Str und Val.

Verwenden einer bestimmten Kultur

Stellen Sie sich vor, Sie entwickeln eine Anwendung, die ein Datum (als Zeichenfolge formatiert) an einen Webdienst sendet. In diesem Fall muss Ihre Anwendung eine bestimmte Kultur für die Zeichenfolgenkonvertierung verwenden. Um den Grund zu veranschaulichen, sollten Sie das Ergebnis der Verwendung der ToString()-Methode für das Datum in Betracht ziehen: Wenn Ihre Anwendung diese Methode zum Formatieren des Datums 4. Juli 2005 verwendet, gibt sie „7/4/2005 12:00:00 AM“ zurück, wenn sie mit der Kultur „US-Englisch (en-US)“ ausgeführt wird, aber „04.07.2005 00:00:00“, wenn sie mit der Kultur „Deutsch (de-DE)“ ausgeführt wird.

Wenn Sie eine Zeichenfolgenkonvertierung in einem bestimmten Kulturformat ausführen müssen, sollten Sie die CultureInfo-Klasse verwenden, die in .NET Framework integriert ist. Sie können ein neues CultureInfo-Objekt für eine bestimmte Kultur erstellen, indem Sie den Namen der Kultur an den CultureInfo-Konstruktor übergeben. Die unterstützten Kulturnamen werden auf der Hilfeseite der CultureInfo- Klasse aufgeführt.

Alternativ können Sie eine Instanz der invarianten Kultur aus der CultureInfo.InvariantCulture-Eigenschaft abrufen. Die invariante Kultur basiert auf der englischen Kultur, aber es gibt einige Unterschiede. Die invariante Kultur gibt beispielsweise ein 24-Stunden-Format anstelle eines 12-Stunden-Formats an.

Um ein Datum in die Zeichenfolge der Kultur zu konvertieren, übergeben Sie das CultureInfo-Objekt an die ToString(IFormatProvider)-Methode des Datumsobjekts. Der folgende Code zeigt beispielsweise unabhängig von den Kultureinstellungen der Anwendung „07/04/2005 00:00:00“ an.

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

Hinweis

Datumsliterale werden immer entsprechend der englischen Kultur interpretiert.

Vergleichen von Zeichenfolgen

Es gibt zwei wichtige Situationen, in denen Zeichenfolgenvergleiche erforderlich sind:

  • Sortieren von Daten zur Anzeige für Benutzer*innen. Verwenden von Vorgängen basierend auf der aktuellen Kultur, damit die Zeichenfolgen entsprechend sortiert werden.

  • Bestimmen, ob zwei anwendungsinterne Zeichenfolgen genau übereinstimmen (in der Regel aus Sicherheitsgründen). Verwenden von Vorgängen, die die aktuelle Kultur außer Acht lassen.

Sie können beide Arten von Vergleichen mit der Visual Basic-Funktion StrComp durchführen. Geben Sie das optionale Compare-Argument an, um den Typ des Vergleichs zu steuern: Text für die meisten Eingaben und Ausgaben, Binary zum Bestimmen genauer Übereinstimmungen.

Die StrComp-Funktion gibt eine ganze Zahl zurück, die die Beziehung zwischen den beiden verglichenen Zeichenfolgen basierend auf der Sortierreihenfolge angibt. Ein positiver Wert für das Ergebnis gibt an, dass die erste Zeichenfolge größer als die zweite Zeichenfolge ist. Ein negatives Ergebnis gibt an, dass die erste Zeichenfolge kleiner ist, und null (0) gibt die Gleichheit der Zeichenfolgen an.

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

Sie können auch den .NET Framework-Partner der StrComp-Funktion verwenden, die String.Compare-Methode. Dies ist eine statische, überladene Methode der Basiszeichenfolgenklasse. Das folgende Beispiel veranschaulicht, wie diese Methode verwendet wird:

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

Für eine genauere Steuerung der Durchführung der Vergleiche können Sie zusätzliche Überladungen der Compare-Methode verwenden. Mit der String.Compare-Methode können Sie das comparisonType-Argument verwenden, um anzugeben, welcher Vergleichstyp verwendet werden soll.

Wert für comparisonType-Argument Typ des Vergleichs Verwendung
Ordinal Vergleich basierend auf den Komponentenbytes von Zeichenfolgen. Mit diesem Wert können Sie Folgendes vergleichen: Bezeichner ohne Berücksichtigung der Groß-/Kleinschreibung, Sicherheitseinstellungen oder andere nicht linguistische Bezeichner, deren Bytes genau übereinstimmen müssen.
OrdinalIgnoreCase Vergleich basierend auf den Komponentenbytes von Zeichenfolgen.

OrdinalIgnoreCase verwendet die invarianten Kulturinformationen, um zu bestimmen, wann sich zwei Zeichen nur in Groß- und Kleinschreibung unterscheiden.
Mit diesem Wert können Sie Folgendes vergleichen: Bezeichner ohne Berücksichtigung der Groß-/Kleinschreibung, sicherheitsbezogene Einstellungen und in Windows gespeicherte Daten.
CurrentCulture oder CurrentCultureIgnoreCase Vergleich basierend auf der Interpretation der Zeichenfolgen in der aktuellen Kultur. Mit diesen Werten können Sie Folgendes vergleichen: für den Benutzer angezeigte Daten, die meisten Benutzereingaben und weitere Daten, die eine linguistische Interpretation erfordern.
InvariantCulture oder InvariantCultureIgnoreCase Vergleich basierend auf der Interpretation der Zeichenfolgen in der invarianten Kultur.

Dies unterscheidet sich von Ordinal und OrdinalIgnoreCase, da die invariante Kultur Zeichen außerhalb des akzeptierten Bereichs als gleichwertige invariante Zeichen behandelt.
Verwenden Sie diese Werte nur für den Vergleich dauerhafter Daten oder zum Anzeigen linguistisch relevanter Daten, die eine feste Sortierreihenfolge erfordern.

Sicherheitsüberlegungen

Wenn Ihre Anwendung Sicherheitsentscheidungen basierend auf dem Ergebnis eines Vergleichsvorgangs oder einer Änderung von Groß-/Kleinschreibung trifft, sollte der Vorgang die String.Compare-Methode verwenden und Ordinal oder OrdinalIgnoreCase für das comparisonType-Argument übergeben.

Siehe auch