Como a cultura afeta strings no Visual Basic
Esta página da Ajuda discute como Visual Basic usa as informações de cultura para realizar conversões de seqüência de caracteres e comparações.
Quando usar Strings cultura-Specific
Normalmente, você deve usar seqüências de caracteres específicos de cultura para todos os dados apresentados ao ler a partir do usuários e usar seqüências de caracteres de cultura invariável para os dados internos do seu aplicativo.
Por exemplo, se seu aplicativo pergunta aos usuários para inserir uma data sistema autônomo uma seqüência de caracteres, ele deve esperar que sistema autônomo usuários para formatar sistema autônomo seqüências de caracteres de acordo com a sua cultura e o aplicativo deve converter a seqüência de caracteres corretamente.Se seu aplicativo, em seguida, apresenta a data em sua interface de usuário, ela deve apresentar na cultura do usuário.
No entanto, se o aplicativo carrega a data para um servidor central, ele deve formatar a seqüência de caracteres de acordo com a uma cultura específica, para evitar confusão entre formatos de data potencialmente diferentes.
Sensível a cultura funções
Todos os Visual Basic funções de conversão de seqüência de caracteres (exceto para o Str e Val funções) usar informações de cultura do aplicativo para certificar-se de que conversões e comparações sejam adequadas para a cultura do usuário do aplicativo.
A chave a usar as funções de conversão de seqüência de caracteres com êxito em aplicativos executados em computadores com configurações de cultura diferente é compreender quais funções usam uma configuração de cultura específica e que usam a configuração de cultura corrente.Observe que 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 Funções Asc, AscW, Funções Chr, ChrW, Função Format, Função Hex (Visual Basic), Função Oct, e Funções de conversão de tipo .
The Str (converte números em seqüências de caracteres) e Val funções (converte seqüências para números) não usam informações de cultura do aplicativo ao converter entre cadeias de caracteres e números. Em vez disso, eles reconhecem somente o ponto (.) sistema autônomo separador decimal válido.As semelhanças culturalmente reconhecimento dessas funções são:
Conversões que usam a cultura corrente. The CStr e Format funções de converter um número em uma seqüência de caracteres e o CDbl e CInt funções de convertem uma seqüência de caracteres em um número.
Conversões que usam uma cultura específica. Cada objeto número tem um ToString(IFormatProvider) método converte um número em uma seqüência de caracteres, e um Parse(String, IFormatProvider) método converte uma seqüência de caracteres em um número. Por exemplo, a Double tipo fornece o ToString(IFormatProvider) e Parse(String, IFormatProvider) métodos.
Para obter mais informações, consulte Função Str e Função Val.
Usando uma cultura específica
Imagine que você está desenvolvendo um aplicativo que envia uma data (formatada sistema autônomo uma seqüência de caracteres) para um serviço Web.Nesse caso, o aplicativo deve usar uma cultura específica para a conversão de seqüência de caracteres.Para ilustrar por que, considere o resultado do uso ToString() método: Se seu aplicativo usa esse método para formatar a data 4 de julho de 2005, ela retorna "4/7/2005 12: 00: 00 AM"quando executa com a cultura dos Estados Unidos inglês (en-US), mas ela retorna"04.07.2005 00: 00: 00" quando executa com a cultura alemão (de-DE).
Quando você precisa executar uma conversão de seqüência de caracteres em um formato de cultura específica, você deve usar o CultureInfo classe interna das .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 com suporte estão listados no CultureInfo classe de página de Ajuda.
Como alternativa, você pode obter uma instância do cultura invariável from the CultureInfo.InvariantCulture propriedade. A cultura invariável baseia-se na cultura em inglês, mas existem algumas diferenças.Por exemplo, a cultura invariável Especifica um relógio de 24 horas em vez de um relógio de 12 horas.
Para converter uma data para seqüência de caracteres da cultura, passe o CultureInfo objeto para o objeto de data ToString(IFormatProvider) método. Por exemplo, o seguinte código 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))
Observação: |
---|
Literais de data sempre são interpretados conforme a cultura em inglês. |
Comparando Sequências de Caracteres
Há duas situações importantes onde as comparações de seqüência de caracteres são necessários:
Classificando dados para exibição ao usuário. Use operações com base na cultura corrente para que as seqüências de caracteres de classificar apropriadamente.
Determinar se duas seqüências de caracteres de aplicativos internas corresponder exatamente (geralmente para fins de segurança). Use operações desconsiderar a cultura corrente.
You can perform both types of comparisons with the Visual Basic StrComp function.Especifique o opcionalCompare argumento para controlar o tipo de comparação: Text para entrada e saída, a maioria dos Binary para determinar as correspondências exatas.
The StrComp função retorna um número inteiro que indica a relação entre as duas seqüências de caracteres em comparação com base na ordem de classificação. Um valor positivo para o resultado indica que a primeira seqüência de caracteres é maior do que a segunda seqüência de caracteres.Um resultado negativo indica a primeira seqüência de caracteres é menor, e zero indica 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 parceiro das StrComp função, o String.Compare método. Isso é um método sobrecarregado estático da classe base da 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 do Compare método. Com o String.Compare método, você pode usar o comparisonType argumento para especificar qual tipo de comparação para usar.
Valor de comparisonType argumento |
Tipo de comparação |
Quando usar |
---|---|---|
Comparação com base em bytes de componente de seqüências. |
Use esse valor ao comparar: caso-identificadores sensíveis, configurações relacionadas à segurança ou outros identificadores não lingüísticos no qual os bytes devem coincidir exatamente. |
|
Comparação com base em bytes de componente de seqüências. OrdinalIgnoreCase usa as informações de cultura invariável para determinar quando dois caracteres diferem apenas em letras uso de maiúsculas. |
Use esse valor ao comparar: identificadores que diferenciam maiúsculas de minúsculas, configurações relacionadas à segurança e dados armazenados no Windows. |
|
Comparação com base na interpretação as seqüências na cultura corrente. |
Use esses valores ao comparar: dados que serão exibidos para o usuário, a maioria das entradas do usuário e outros dados que requer interpretação lingüística. |
|
Comparação com base na interpretação as seqüências na cultura invariável. Isso é diferente de Ordinal e OrdinalIgnoreCase, porque a cultura invariável considera caracteres fora do seu intervalo aceito sistema autônomo caracteres invariável equivalentes. |
Use esses valores apenas ao comparar dados persistentes ou exibir dados linguistically relevantes que requer uma ordem de classificar fixo. |
Considerações sobre segurança
Se seu aplicativo toma decisões de segurança com base no resultado de uma comparação ou operação alteração maiúscula-minúscula, então a operação deve usar o método String.Compare e passar Ordinal ou OrdinalIgnoreCase para o argumento comparisonType.