Sdílet prostřednictvím


Vliv jazykové verze na řetězce v jazyce Visual Basic

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

Kdy použít řetězce specifické pro jazykovou verzi

Obvykle byste měli používat řetězce specifické pro jazykovou verzi pro všechna data prezentovaná uživatelům a číst je od uživatelů a používat pro interní data vaší aplikace invariantní řetězce jazykové verze.

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 citlivé na jazykovou verzi

Všechny funkce převodu řetězců jazyka Visual Basic (s výjimkou StrVal funkcí) používají informace o jazykové verzi aplikace, aby se zajistilo, že převody a porovnání jsou vhodné pro jazykovou verzi 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 nastavení jazykové verze aplikace jsou ve výchozím nastavení zděděná z nastavení jazykové verze operačního systému. Další informace naleznete v tématu Asc, , ChrFormatHexChrWAscW, , 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 (.). Analogy těchto funkcí s kulturním vědomím jsou:

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

  • Převody, které používají konkrétní jazykovou verzi 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. Double Například typ poskytuje a ToString(IFormatProvider)Parse(String, IFormatProvider) metody.

Další informace najdete v tématech Str a Val.

Použití konkrétní jazykové verze

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í jazykovou verzi. Pokud chcete ilustrovat proč, zvažte výsledek použití metody dataToString(): Pokud vaše aplikace tuto metodu používá k formátování data 4. července, 2005, vrátí "7/4/2005 12:00:00 AM" při spuštění s jazykovou verzí USA angličtina (en-US), 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 v určitém jazykovém formátu, měli byste použít CultureInfo třídu, která je integrovaná v rozhraní .NET Framework. Nový CultureInfo objekt pro konkrétní jazykovou verzi můžete vytvořit předáním názvu jazykové verze konstruktoru CultureInfo . Podporované názvy jazykových verzí jsou uvedeny na CultureInfo stránce nápovědy třídy.

Alternativně můžete z vlastnosti získat instanci invariantní jazykové verzeCultureInfo.InvariantCulture. Invariantní jazyková verze je založena na anglické jazykové verzi, ale existují určité rozdíly. Invariantní jazyková verze například určuje 24hodinové hodiny místo 12hodinových hodin.

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í "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:

Literály data se vždy interpretují podle anglické jazykové verze.

Porovnává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í jazykové verzi, 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é ignoruje aktuální jazykovou verzi.

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 StrComp rozhraní .NET Framework funkce, metodu String.Compare . Jedná se o statickou přetíženou metodu základní třídy ř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)

Pokud chcete jemně řídit způsob provedení porovnání, můžete použít další přetížení Compare metody. 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í Vhodné použití služby
Ordinal Porovnání na základě bajtů součástí ř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ání na základě bajtů součástí řetězců

OrdinalIgnoreCase používá invariantní informace jazykové verze k určení, kdy se dva znaky liší pouze velkými písmeny.
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í jazykové verzi. 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í jazykové verzi.

To se liší od Ordinal invariantní OrdinalIgnoreCasejazykové verze, protože invariantní jazyková verze zpracovává znaky mimo jeho akceptovanou oblast 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é