Sdílet prostřednictvím


Jak kultura ovlivňuje řetězce v jazyce Visual Basic

Tato stránka nápovědy popisuje, jak Visual Basic používá informace o kultuře k provádění převodů a porovnání řetězců.

Kdy použít tyto Culture-Specific řetězce

Obvykle byste měli používat řetězce specifické pro jazykovou verzi pro všechna data prezentovaná uživatelům a k jejich čtení uživateli, zatímco pro interní data vaší aplikace byste měli používat jazykově nezávislé řetězce.

Pokud například vaše aplikace požádá uživatele, aby zadali datum jako řetězec, měli byste očekávat, že uživatelé budou řetězce formátovat podle jazykové verze a aplikace by měla řetězec odpovídajícím způsobem převést. Pokud vaše aplikace toto datum zobrazí v uživatelském rozhraní, měla by ho prezentovat v jazykové verzi uživatele.

Pokud ale aplikace nahraje datum na centrální server, měl by řetězec naformátovat podle jedné konkrétní jazykové verze, aby se zabránilo nejasnostem mezi potenciálně různými formáty kalendářních dat.

funkce Culture-Sensitive

Všechny funkce převodu řetězců jazyka Visual Basic (s výjimkou funkcí Str a Val) používají informace o jazykových normách aplikace, aby bylo zajištěno, že převody a porovnání jsou vhodné pro jazykové prostředí uživatele aplikace.

Klíčem k úspěšnému použití funkcí převodu řetězců v aplikacích, které běží na počítačích s různými nastaveními jazykové verze, je pochopit, které funkce používají konkrétní nastavení jazykové verze a které používají aktuální nastavení jazykové verze. Všimněte si, že kulturní nastavení aplikace jsou ve výchozím nastavení zděděná z kulturních nastavení operačního systému. Další informace naleznete v Asc, AscW, Chr, ChrW, Format, Hex, Oct a Funkce převodu typů.

Funkce Str (převádí čísla na řetězce) a Val (převádí řetězce na čísla) při převodu mezi řetězci a čísly nepoužívají informace o jazykové verzi aplikace. Místo toho rozpoznávají jako platný oddělovač desetinných míst pouze tečku (.). Kulturně uvědomělé analogie těchto funkcí jsou:

  • Převody, které používají aktuální kulturní nastavení. Funkce CStr a Format převedou číslo na řetězec a funkce CDbl a CInt převedou řetězec na číslo.

  • Převody, které používají konkrétní kulturu Každý číselný objekt má metodu ToString(IFormatProvider) , která převede číslo na řetězec a metodu Parse(String, IFormatProvider) , která převede řetězec na číslo. Například typ Double poskytuje metody ToString(IFormatProvider) a Parse(String, IFormatProvider).

Pro více informací se podívejte na Str a Val.

Použití konkrétní kultury

Představte si, že vyvíjíte aplikaci, která do webové služby odesílá datum (formátované jako řetězec). V tomto případě musí vaše aplikace pro převod řetězce použít konkrétní kulturu. Pokud chcete ilustrovat proč, zvažte výsledek použití metody data ToString() : Pokud vaše aplikace tuto metodu používá k formátování data 4. července, 2005, vrátí "7/4/2005 12:00:00" při spuštění s angličtinou Usa (en-US) jazykovou verzi, ale vrátí "04.07.2005 00:00:00" při spuštění s německou jazykovou verzí (de-DE).

Pokud potřebujete provést převod řetězce ve specifickém kulturním formátu, měli byste použít třídu CultureInfo, která je integrovaná v rozhraní .NET Framework. Nový CultureInfo objekt pro konkrétní kulturu můžete vytvořit předáním názvu kultury konstruktoru CultureInfo. Podporované názvy kulturních prostředí jsou uvedeny na stránce nápovědy třídy CultureInfo.

Alternativně můžete získat instanci invariantní jazykové verze z vlastnosti CultureInfo.InvariantCulture. Invariantní kultura je založena na anglické kultuře, ale existují určité rozdíly. Invariantní kultura například určuje 24hodinový formát času místo 12hodinového formátu času.

Chcete-li převést datum na řetězec jazykové verze, předejte CultureInfo objekt metodě objektu data ToString(IFormatProvider) . Například následující kód zobrazí datum "07/04/2005 00:00:00" bez ohledu na nastavení jazykové verze aplikace.

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

Poznámka:

Datumové literály se vždy interpretují podle anglického kulturního kontextu.

Porovnání řetězců

Existují dvě důležité situace, kdy jsou potřeba porovnání řetězců:

  • Řazení dat pro zobrazení pro uživatele Použijte operace založené na aktuálním kulturním nastavení, aby se řetězce správně seřadily.

  • Určení, jestli se dva interní řetězce aplikace přesně shodují (obvykle pro účely zabezpečení). Používejte operace, které ignorují aktuální kulturu.

Pomocí funkce Jazyka Visual Basic StrComp můžete provádět obě typy porovnání. Zadejte volitelný Compare argument, který určuje typ porovnání: Text pro většinu vstupů a výstupů Binary pro určení přesných shod.

Funkce StrComp vrátí celé číslo, které označuje vztah mezi dvěma porovnávaným řetězci na základě pořadí řazení. Kladná hodnota výsledku označuje, že první řetězec je větší než druhý řetězec. Záporný výsledek označuje, že první řetězec je menší a nula označuje rovnost mezi řetězci.

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

Můžete také použít partnera funkce rozhraní .NET Framework, metodu StrComp. Jedná se o přetíženou statickou metodu třídy základního řetězce. Následující příklad ukazuje, jak se tato metoda používá:

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

Pro větší kontrolu nad tím, jak se provádí porovnání, můžete použít další přetížení metody Compare. String.Compare Pomocí metody můžete pomocí argumentu comparisonType určit, jaký typ porovnání se má použít.

Hodnota argumentu comparisonType Typ porovnání Kdy používat
Ordinal Porovnávání na základě bajtů komponent řetězců Tuto hodnotu použijte při porovnávání: identifikátory citlivé na malá a velká písmena, nastavení související se zabezpečením nebo jiné nejazyčné identifikátory, kde se bajty musí přesně shodovat.
OrdinalIgnoreCase Porovnávání na základě bajtů komponent řetězců

OrdinalIgnoreCase používá informace invariantní jazykové kultury k určení, kdy se dva znaky liší pouze kapitálkami.
Tuto hodnotu použijte při porovnávání: identifikátory nerozlišující malá a velká písmena, nastavení související se zabezpečením a data uložená ve Windows.
CurrentCulture nebo CurrentCultureIgnoreCase Porovnání na základě interpretace řetězců v aktuální kultuře. Tyto hodnoty použijte při porovnávání: data zobrazená uživateli, většina uživatelských vstupů a dalších dat, která vyžadují jazykovou interpretaci.
InvariantCulture nebo InvariantCultureIgnoreCase Porovnání na základě interpretace řetězců v invariantním kulturním kontextu.

To se liší od Ordinal a OrdinalIgnoreCase, protože invariantní kultura zpracovává znaky mimo její akceptovaný rozsah jako ekvivalentní invariantní znaky.
Tyto hodnoty používejte pouze při porovnávání trvalých dat nebo zobrazení lingvisticky relevantních dat, která vyžadují pevné pořadí řazení.

Aspekty zabezpečení

Pokud vaše aplikace provádí rozhodnutí o zabezpečení na základě výsledku operace porovnání nebo změny případu, měla by tato operace použít metodu String.Compare a předat Ordinal nebo OrdinalIgnoreCase pro comparisonType argument.

Viz také