Como a cultura afeta cadeias de caracteres no Visual Basic
Esta página de Ajuda discute como o Visual Basic usa informações de cultura para executar conversões e comparações de cadeia de caracteres.
Quando usar cadeias de caracteres específicas da cultura
Normalmente, você deve usar cadeias de caracteres específicas de cultura para todos os dados apresentados e lidos pelos usuários, e usar cadeias de caracteres invariantes de cultura para os dados internos do seu aplicativo.
Por exemplo, se seu aplicativo pedir aos usuários para inserir uma data como uma cadeia de caracteres, ele deve esperar que os usuários formatem as cadeias de caracteres de acordo com sua cultura, e o aplicativo deve converter a cadeia de caracteres adequadamente. Se o seu aplicativo apresentar essa data em sua interface do usuário, ele deverá apresentá-la na cultura do usuário.
No entanto, se o aplicativo carregar a data para um servidor central, ele deve formatar a cadeia de caracteres de acordo com uma cultura específica, para evitar confusão entre formatos de data potencialmente diferentes.
Funções sensíveis à cultura
Todas as funções de conversão de cadeia de caracteres do Visual Basic (exceto as Str
funções e Val
) usam as informações de cultura do aplicativo para garantir que as conversões e comparações sejam apropriadas para a cultura do usuário do aplicativo.
A chave para usar com êxito funções de conversão de cadeia de caracteres em aplicativos executados em computadores com configurações de cultura diferentes é entender quais funções usam uma configuração de cultura específica e quais usam a configuração de cultura atual. Observe que as configurações de cultura do aplicativo são, por padrão, herdadas das configurações de cultura do sistema operacional. Para obter mais informações, consulte Asc, AscW, , Chr, ChrWFormat, Hex, Oct, e Funções de conversão de tipo.
As Str
funções (converte números em cadeias de caracteres) e Val
(converte cadeias de caracteres em números) não usam as informações de cultura do aplicativo ao converter entre cadeias de caracteres e números. Em vez disso, eles reconhecem apenas o ponto (.) como um separador decimal válido. Os análogos culturalmente conscientes destas funções são:
Conversões que usam a cultura atual. As
CStr
funções eFormat
convertem um número em uma cadeia de caracteres e as funções eCInt
convertemCDbl
uma cadeia de caracteres em um número.Conversões que usam uma cultura específica. Cada objeto number tem um
ToString(IFormatProvider)
método que converte um número em uma cadeia de caracteres e umParse(String, IFormatProvider)
método que converte uma cadeia de caracteres em um número. Por exemplo, oDouble
tipo fornece os ToString(IFormatProvider) métodos e Parse(String, IFormatProvider) .
Para obter mais informações, consulte Str e Val.
Usando uma cultura específica
Imagine que você está desenvolvendo um aplicativo que envia uma data (formatada como uma cadeia de caracteres) para um serviço Web. Nesse caso, seu aplicativo deve usar uma cultura específica para a conversão de cadeia de caracteres. Para ilustrar o motivo, considere o resultado do uso do método da ToString() data: Se seu aplicativo usa esse método para formatar a data de 4 de julho de 2005, ele retorna "7/4/2005 12:00:00 AM" quando executado com a cultura do inglês dos Estados Unidos (en-US), mas retorna "04.07.2005 00:00:00" quando executado com a cultura alemã (de-DE).
Quando você precisa executar uma conversão de cadeia de caracteres em um formato de cultura específico, você deve usar a CultureInfo
classe que é incorporada no .NET Framework. Você pode criar um novo CultureInfo
objeto para uma cultura específica passando o nome da cultura para o CultureInfo construtor. Os nomes de cultura suportados estão listados na página Ajuda da CultureInfo classe.
Como alternativa, você pode obter uma instância da cultura invariante da CultureInfo.InvariantCulture propriedade. A cultura invariante é baseada na cultura inglesa, mas existem algumas diferenças. Por exemplo, a cultura invariante especifica um relógio de 24 horas em vez de um relógio de 12 horas.
Para converter uma data para a cadeia de caracteres da cultura, passe o CultureInfo objeto para o método do ToString(IFormatProvider) objeto date. Por exemplo, o código a seguir exibe "07/04/2005 00:00:00", independentemente das configurações de cultura do aplicativo.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
Nota
Os literais de data são sempre interpretados de acordo com a cultura inglesa.
Comparando cadeias de caracteres
Há duas situações importantes em que as comparações de cadeia de caracteres são necessárias:
Classificando dados para exibição ao usuário. Use operações baseadas na cultura atual para que as cadeias de caracteres sejam classificadas adequadamente.
Determinar se duas cadeias de caracteres internas do aplicativo correspondem exatamente (normalmente para fins de segurança). Use operações que desconsiderem a cultura atual.
Você pode executar ambos os tipos de comparações com a função Visual Basic StrComp . Especifique o argumento opcional Compare
para controlar o tipo de comparação: Text
para a maioria das entradas e saídas Binary
para determinar correspondências exatas.
A StrComp
função retorna um inteiro que indica a relação entre as duas cadeias de caracteres comparadas com base na ordem de classificação. Um valor positivo para o resultado indica que a primeira cadeia de caracteres é maior do que a segunda cadeia de caracteres. Um resultado negativo indica que a primeira cadeia de caracteres é menor e zero indica igualdade entre as cadeias de caracteres.
' 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)
Você também pode usar o parceiro do .NET Framework da StrComp
função, o String.Compare método. Este é um método estático e sobrecarregado da classe de cadeia de caracteres base. O exemplo a seguir ilustra como esse método é usado:
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
Para um controle mais fino sobre como as comparações são executadas, você pode usar sobrecargas adicionais do Compare método. Com o String.Compare método, você pode usar o comparisonType
argumento para especificar qual tipo de comparação usar.
Valor para comparisonType argumento |
Tipo de comparação | Quando utilizar o |
---|---|---|
Ordinal |
Comparação baseada nos bytes componentes das cadeias de caracteres. | Use esse valor ao comparar: identificadores que diferenciam maiúsculas de minúsculas, configurações relacionadas à segurança ou outros identificadores não linguísticos em que os bytes devem corresponder exatamente. |
OrdinalIgnoreCase |
Comparação baseada nos bytes componentes das cadeias de caracteres.OrdinalIgnoreCase usa as informações de cultura invariante para determinar quando dois caracteres diferem apenas em maiúsculas. |
Use esse valor ao comparar: identificadores que não diferenciam maiúsculas de minúsculas, configurações relacionadas à segurança e dados armazenados no Windows. |
CurrentCulture ou CurrentCultureIgnoreCase |
Comparação baseada na interpretação das cordas na cultura atual. | Use estes valores ao comparar: dados que são exibidos para o usuário, a maioria das entradas do usuário e outros dados que exigem interpretação linguística. |
InvariantCulture ou InvariantCultureIgnoreCase |
Comparação baseada na interpretação das cordas na cultura invariante. Isso é diferente do Ordinal e , porque a cultura invariante OrdinalIgnoreCase trata caracteres fora de seu intervalo aceito como caracteres invariantes equivalentes. |
Use esses valores somente ao comparar dados persistentes ou exibir dados linguisticamente relevantes que exijam uma ordem de classificação fixa. |
Considerações de Segurança
Se seu aplicativo toma decisões de segurança com base no resultado de uma comparação ou operação de mudança de caso, a operação deve usar o String.Compare método e passar Ordinal
ou OrdinalIgnoreCase
para o comparisonType
argumento.