Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 Culture-Specific
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.
Culture-Sensitive Funkcje
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 Asc, AscW, Chr, ChrW, Format, Hex, Oct, i Funkcje Konwersji Typów.
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. Świadome kulturowo odpowiedniki tych funkcji są następujące:
Konwersje korzystające z bieżącej kultury. Funkcje
CStriFormatkonwertują liczbę na ciąg, aCDblfunkcje iCIntkonwertują ciąg na liczbę.Konwersje, które korzystają 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ład typDoubleudostępnia metody ToString(IFormatProvider) i Parse(String, IFormatProvider).
Aby uzyskać więcej informacji, zobacz Str i 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 daty ToString(): jeśli aplikacja używa tej metody do formatowania daty dnia 4 lipca 2005 roku, zwraca "7.04.2005 00:00:00" po uruchomieniu z kulturą angielską (Stany Zjednoczone) (en-US), ale zwraca "04.07.2005 00:00:00" podczas uruchamiania 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, z właściwości możesz uzyskać wystąpienie CultureInfo.InvariantCulture. 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 / Notatka
Literały dat są zawsze interpretowane zgodnie z angielskimi zasadami językowymi.
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 znaków wewnątrz aplikacji są identyczne (zazwyczaj w celach bezpieczeństwa). Użyj działań, które ignorują obecną 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ć metody StrComp, która jest partnerem funkcji String.Compare w platformie .NET Framework. 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 należy używać |
|---|---|---|
Ordinal |
Porównanie na podstawie bajtów elementó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 elementó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 oparte na interpretacji ciągów znaków w kontekście niezmiennej kultury. Różni się to od Ordinal i OrdinalIgnoreCase, ponieważ niezmienna kultura traktuje znaki znajdujące się poza akceptowanym zakresem jako równoważne znaki niezmienne. |
Używaj tych wartości tylko podczas porównywania trwałych danych lub wyświetlania danych istotnych lingwistycznie, które wymagają stałego porządku sortowania. |
Zagadnienia dotyczące zabezpieczeń
Jeśli aplikacja podejmuje decyzje dotyczące zabezpieczeń na podstawie wyniku operacji porównania lub zmiany wielkości liter, operacja powinna używać metody String.Compare i przekazywać Ordinal lub OrdinalIgnoreCase jako argument dla comparisonType.