Wpływ kultury na ciągi w Visual Basic
Na tej stronie Pomocy omówiono sposób, w jaki program Visual Basic używa informacji o kulturze do przeprowadzania konwersji i porównań ciągów.
Kiedy należy używać ciągów specyficznych dla kultury
Zazwyczaj należy używać ciągów specyficznych dla kultury dla wszystkich danych prezentowanych i odczytywanych od użytkowników oraz używać niezmiennych ciągów kultury dla danych wewnętrznych aplikacji.
Jeśli na przykład aplikacja prosi użytkowników o wprowadzenie daty jako ciągu, powinna oczekiwać, że użytkownicy będą formatować ciągi zgodnie z ich kulturą, a aplikacja powinna odpowiednio przekonwertować ciąg. Jeśli aplikacja przedstawia datę w interfejsie użytkownika, powinna ona zostać wyświetlona w kulturze użytkownika.
Jeśli jednak aplikacja przekaże datę do serwera centralnego, powinna sformatować ciąg zgodnie z jedną konkretną kulturą, aby zapobiec nieporozumieniu między potencjalnie różnymi formatami dat.
Funkcje wrażliwe na kulturę
Wszystkie funkcje konwersji ciągów języka Visual Basic (z wyjątkiem Str
funkcji i Val
) używają informacji o kulturze aplikacji, aby upewnić się, że konwersje i porównania są odpowiednie dla kultury użytkownika aplikacji.
Kluczem do pomyślnego używania funkcji konwersji ciągów w aplikacjach uruchamianych na komputerach z różnymi ustawieniami kultury jest zrozumienie, które funkcje używają określonego ustawienia kultury i które używają bieżącego ustawienia kultury. Zwróć uwagę, że ustawienia kultury aplikacji są domyślnie dziedziczone z ustawień kultury systemu operacyjnego. Aby uzyskać więcej informacji, zobacz Funkcje konwersji typów , AscWFormatChrHexChrW, Oct, i .Asc
Funkcje Str
(konwertują liczby na ciągi) i Val
(konwertują ciągi na liczby) nie używają informacji o kulturze aplikacji podczas konwertowania między ciągami i liczbami. Zamiast tego rozpoznają tylko kropkę (.) jako prawidłowy separator dziesiętny. Analogie świadome kulturowo są następujące:
Konwersje korzystające z bieżącej kultury. Funkcje
CStr
iFormat
konwertują liczbę na ciąg, aCDbl
funkcje iCInt
konwertują ciąg na liczbę.Konwersje korzystające z określonej kultury. Każdy obiekt liczbowy ma metodę
ToString(IFormatProvider)
, która konwertuje liczbę na ciąg iParse(String, IFormatProvider)
metodę, która konwertuje ciąg na liczbę. Na przykładDouble
typ udostępnia ToString(IFormatProvider) metody i .Parse(String, IFormatProvider)
Aby uzyskać więcej informacji, zobacz tematy Str oraz Val.
Używanie określonej kultury
Załóżmy, że tworzysz aplikację, która wysyła datę (sformatowaną jako ciąg) do usługi sieci Web. W takim przypadku aplikacja musi używać określonej kultury do konwersji ciągu. Aby zilustrować, rozważ wynik użycia metody datyToString(): jeśli aplikacja używa tej metody do formatowania daty 4 lipca, 2005, zwraca wartość "7/4/2005 12:00:00 AM" po uruchomieniu z kulturą Stany Zjednoczone języka angielskiego (en-US), ale zwraca wartość "04.07.2005 00:00:00" po uruchomieniu z kulturą niemiecką (de-DE).
Jeśli musisz wykonać konwersję ciągu w określonym formacie kultury, należy użyć CultureInfo
klasy wbudowanej w program .NET Framework. Możesz utworzyć nowy CultureInfo
obiekt dla określonej kultury, przekazując nazwę kultury do konstruktora CultureInfo . Obsługiwane nazwy kultury są wymienione na CultureInfo stronie Pomocy klasy.
Alternatywnie możesz uzyskać wystąpienie niezmiennej kultury z CultureInfo.InvariantCulture właściwości . Niezmienna kultura opiera się na kulturze angielskiej, ale istnieją pewne różnice. Na przykład niezmienna kultura określa zegar 24-godzinny zamiast zegara 12-godzinnego.
Aby przekonwertować datę na ciąg kultury, przekaż CultureInfo obiekt do metody obiektu ToString(IFormatProvider) daty. Na przykład poniższy kod wyświetla komunikat "07/04/2005 00:00:00", niezależnie od ustawień kultury aplikacji.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
Uwaga
Literały daty są zawsze interpretowane zgodnie z kulturą angielską.
Porównywanie ciągów
Istnieją dwie ważne sytuacje, w których potrzebne są porównania ciągów:
Sortowanie danych do wyświetlania użytkownikowi. Używaj operacji na podstawie bieżącej kultury, aby ciągi sortować odpowiednio.
Określenie, czy dwa ciągi wewnętrzne aplikacji są dokładnie zgodne (zazwyczaj w celach bezpieczeństwa). Użyj operacji, które ignorują bieżącą kulturę.
Oba typy porównań można wykonać za pomocą funkcji Visual Basic StrComp . Określ opcjonalny Compare
argument do kontrolowania typu porównania: Text
dla większości danych wejściowych i wyjściowych do określania dokładnych dopasowań Binary
.
Funkcja StrComp
zwraca liczbę całkowitą, która wskazuje relację między dwoma porównywanymi ciągami na podstawie kolejności sortowania. Wartość dodatnia wyniku wskazuje, że pierwszy ciąg jest większy niż drugi ciąg. Wynik ujemny wskazuje, że pierwszy ciąg jest mniejszy, a zero wskazuje równość między ciągami.
' 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)
Możesz również użyć partnera StrComp
platformy .NET Framework funkcji String.Compare , metody . Jest to statyczna, przeciążona metoda klasy ciągów bazowych. Poniższy przykład ilustruje sposób użycia tej metody:
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
Aby uzyskać bardziej precyzyjną kontrolę nad sposobem wykonywania porównań, możesz użyć dodatkowych przeciążeń Compare metody. String.Compare Za pomocą metody można użyć argumentu comparisonType
, aby określić typ porównania do użycia.
Wartość argumentu comparisonType |
Typ porównania | Kiedy używać |
---|---|---|
Ordinal |
Porównanie na podstawie bajtów składników ciągów. | Użyj tej wartości podczas porównywania: identyfikatory z uwzględnieniem wielkości liter, ustawienia związane z zabezpieczeniami lub inne identyfikatory nielingwistyczne, w których bajty muszą być dokładnie zgodne. |
OrdinalIgnoreCase |
Porównanie na podstawie bajtów składników ciągów.OrdinalIgnoreCase używa niezmiennych informacji o kulturze, aby określić, kiedy dwa znaki różnią się tylko literami. |
Użyj tej wartości podczas porównywania: identyfikatory bez uwzględniania wielkości liter, ustawienia związane z zabezpieczeniami i dane przechowywane w systemie Windows. |
CurrentCulture lub CurrentCultureIgnoreCase |
Porównanie na podstawie interpretacji ciągów w bieżącej kulturze. | Użyj tych wartości podczas porównywania: danych wyświetlanych użytkownikowi, większości danych wejściowych użytkownika i innych danych, które wymagają interpretacji językowej. |
InvariantCulture lub InvariantCultureIgnoreCase |
Porównanie na podstawie interpretacji ciągów w niezmiennej kulturze. Różni się to od Ordinal OrdinalIgnoreCase i , ponieważ niezmienna kultura traktuje znaki poza akceptowanym zakresem jako równoważne niezmienne znaki. |
Użyj tych wartości tylko podczas porównywania trwałych danych lub wyświetlania danych istotnych lingwistycznego, które wymagają stałego porządku sortowania. |
Zagadnienia związane z zabezpieczeniami
Jeśli aplikacja podejmuje decyzje dotyczące zabezpieczeń na podstawie wyniku operacji porównania lub zmiany wielkości liter, operacja powinna używać String.Compare metody i przekazywać Ordinal
argument lub OrdinalIgnoreCase
dla comparisonType
niego.