Como a cultura afeta as cadeias de caracteres no Visual Basic
Esta página Ajuda discute como Visual Basic usa informações de cultura para realizar conversões de seqüência de caracteres e comparações.
Quando usar seqüências específicas de cultura-
Normalmente, você deve usar a cultura-seqüências específicas para todos os dados apresentados ao ler a partir de usuários e usar a cultura-invariável seqüências de dados internos do seu aplicativo.
Por exemplo, se seu aplicativo solicitar que os usuários insiram uma data como uma seqüência de caracteres, ele deve esperar que os usuários para formatar as seqüências de acordo com sua culturae o aplicativo deve converter a seqüência de caracteres apropriadamente. Se seu aplicativo , em seguida, apresenta a data nainterfacedo usuário, ele deve apresentá-lo o usuárioda cultura.
No entanto, se o aplicativo carrega a data para um servidor central, deve formatar a seqüência de acordo com a específica uma cultura, para evitar confusão entre os formatos de data potencialmente diferentes.
Funções confidenciais de cultura-
Tudo o Visual Basic-funções de conversão de seqüência de caracteres (exceto o Str e Val funções) usar informações de cultura do aplicativopara certificar-se de que as conversões e comparações são apropriadas para a cultura do aplicativodo usuário.
A chave com êxito usando a seqüência de-funções de conversão em aplicativos executados em computadores com configurações diferentes de cultura é compreender quais funções usam umaconfiguraçãode específicas de cultura, e que a atualconfiguraçãode cultura. Observe que as configurações de cultura do aplicativosão, por padrão, herdadas de configurações de cultura do sistema operacional. For more information, see Asc, AscW, Chr, ChrW, Format, Hex, Oct, and Funções de conversão de tipo (Visual Basic).
O Str (converte números em cadeias de caracteres) e Val funções de (converte seqüências para números) não usam informações de cultura do aplicativoao converter entre cadeias de caracteres e números. Em vez disso, eles reconhecem somente o ponto (.) como umseparadordedecimal válido. O culturalmente a-de semelhanças cientes dessas funções são:
Conversões de usam a culturaatual. O CStr e Format funções de converter um número de seqüência de caracteres e o CDbl e CInt funções converter uma seqüência de caracteres para um número.
Conversões de usam uma culturade específica. Cada número de objeto tem um ToString(IFormatProvider)método que converte um número em uma seqüência de caracteres e um Parse(String, IFormatProvider)ométodo que converte uma seqüência de caracteres para um número. Por exemplo, o Double tipo fornece a ToString(IFormatProvider) e Parse(String, IFormatProvider) métodos.
For more information, see Str and Val.
Usando uma cultura específica
Imagine que você está desenvolvendo um aplicativo que envia uma data (formatada como uma seqüência de caracteres) para um serviço Web . Nesse caso, seu aplicativo deve usar uma cultura de específica para a conversão de seqüência de caracteres. Para ilustrar o porquê, considere o resultado do uso da data ToString() método: Se o seu aplicativo usa esse método para formatar a data de 4 de julho de 2005, retorna "4/7/2005 12:00:00 AM" ao ser executado com o inglês dos Estados Unidos (en-dos EUA) cultura, mas retorna "04.07.2005 00: 00: 00" Quando executado com a culturado alemão (de-DE).
Quando você precisar executar uma conversão de seqüência de caracteres em um formato específico de cultura , você deve usar o CultureInfoaclasse que está embutido na .NET Framework. Você pode criar uma nova CultureInfooobjeto para uma cultura específica, passando o nome da culturapara o CultureInfoconstrutor. Os nomes de cultura de suportados estão listados na CultureInfo classe Ajuda página.
Como alternativa, você pode obter uma instância da invariável de cultura partir do CultureInfo.InvariantCulture propriedade. A cultura invariável baseia-se na culturaem inglês, mas existem algumas diferenças. Por exemplo, a cultura invariável Especifica o formato de 24-horas em vez do relógio de 12 horas de-.
Para converter uma data para a culturada seqüência de caracteres, passar o CultureInfooobjeto para data objetodo ToString(IFormatProvider)método. Por exemplo, o código a seguir exibe "04/07/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))
Observação |
---|
Literais deData sempre são interpretados de acordo com a culturado inglês. |
Comparing Strings
Há duas situações importantes onde as comparações de seqüência de caracteres são necessários:
A classificação de dados para exibição para o usuário. Use operações com base na cultura atual para que as seqüências de caracteres a classificação apropriadamente.
Determinar se dois aplicativo-cadeias de caracteres internas corresponderem exatamente (geralmente para fins de segurança ). Use operações desconsiderar a culturaatual.
Você pode executar os dois tipos de comparações com o Visual Basic StrCompdefunção. Especifique o opcional Compare argumento para controlar o tipo de comparação: Textpara a maioria de entrada e saída Binary para determinar correspondências exatas.
O StrComp função retorna um inteiro que indica a relação entre duas seqüências de caracteres comparadas com base na ordem de classificação. Um valor positivo para o resultado indica que a primeira seqüência de caracteres é maior que a segunda seqüência de caracteres. Um resultado negativo indica a primeira seqüência de caracteres é menor, e zero indica a igualdade entre as seqüências 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 after TestStr2. Returns -1.
TestComp = StrComp(TestStr1, TestStr2, CompareMethod.Binary)
' TestStr2 sorts before TestStr1. Returns 1.
TestComp = StrComp(TestStr2, TestStr1)
Você também pode usar o .NET Framework partner of a StrCompafunção, o String.Comparemétodo. Este é um estático, sobrecarregado método da base de classede seqüência de caracteres. 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 exercer um melhor controle sobre como as comparações são realizadas, você pode usar sobrecargas adicionais da Compare método. Com o String.Comparemétodo, você pode usar o comparisonTypeoargumento para especificar qual o tipo de comparação para uso.
OValor para comparisonTypeargumento |
Tipo de comparação |
Quando usar |
Ordinal |
Comparação com base em cadeias de caracteres bytes decomponente . |
Use esse valor ao comparar: identificadores de confidenciais caso-, segurança-configurações relacionadas ou outros identificadores de lingüística não-onde os bytes devem coincidir exatamente. |
OrdinalIgnoreCase |
Comparação com base em cadeias de caracteres bytes decomponente . OrdinalIgnoreCaseusa as informações de cultura de invariável para determinar quando os dois caracteres diferem somente em maiúsculas. |
Use esse valor ao comparar: identificadores de diferenciação de caso-, segurança-configurações relacionadas e dados armazenados no Windows. |
CurrentCultureouCurrentCultureIgnoreCase |
Com base em que as seqüências de comparação interpretação na culturaatual. |
Use esses valores ao comparar: dados que são exibidos para o usuário, a maioria das entradas de usuário e outros dados que requer a interpretação lingüística. |
InvariantCultureouInvariantCultureIgnoreCase |
Com base em que as seqüências de comparação interpretação de culturainvariável. Isso é diferente de Ordinal e OrdinalIgnoreCase, porque a cultura invariável trata caracteres fora do seu intervalo aceito como caracteres invariável equivalente. |
Usar esses valores somente quando a comparação de dados persistentes ou lingüisticamente exibindo dados relevantes de-que requer uma ordem de classificaçãode fixa. |
Security Considerations
If your application makes security decisions based on the result of a comparison or case-change operation, then the operation should use the String.Compare method, and pass Ordinal or OrdinalIgnoreCase for the comparisonType argument.
Consulte também
Referência
Funções de conversão de tipo (Visual Basic)