Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta página de Ayuda se describe cómo Visual Basic usa la información de referencia cultural para realizar comparaciones y conversiones de cadenas.
Cuándo usar cadenas de Culture-Specific
Por lo general, debe usar cadenas con referencias culturales específicas para todos los datos que se presentan a los usuarios y se leen de ellos, y usar cadenas con referencia cultural invariable para los datos internos de la aplicación.
Por ejemplo, si la aplicación pide a los usuarios que escriban una fecha como una cadena, debe esperar que los usuarios dé formato a las cadenas según su referencia cultural y la aplicación debe convertir la cadena correctamente. Si la aplicación presenta esa fecha en su interfaz de usuario, debe presentarla en la cultura del usuario.
Sin embargo, si la aplicación carga la fecha en un servidor central, debe dar formato a la cadena según una referencia cultural específica, para evitar confusiones entre formatos de fecha potencialmente diferentes.
Funciones que tienen en cuenta la referencia cultural
Todas las funciones de conversión de cadenas de Visual Basic (excepto las funciones Str y Val ) utilizan la información cultural de la aplicación para asegurarse de que las conversiones y comparaciones sean adecuadas para la cultura del usuario de la aplicación.
La clave para usar correctamente funciones de conversión de cadenas en aplicaciones que se ejecutan en equipos con diferentes valores de referencia cultural es comprender qué funciones usan una configuración de referencia cultural específica y cuáles usan la configuración de referencia cultural actual. Tenga en cuenta que la configuración de referencia cultural de la aplicación es, de forma predeterminada, heredada de la configuración cultural del sistema operativo. Para obtener más información, vea Asc, AscW, Chr, ChrW, Format, Hex, Oct y Funciones de conversión de tipos.
Las Str funciones (convierte números en cadenas) y Val (convierte cadenas en números) no usan la información de referencia cultural de la aplicación al convertir entre cadenas y números. En su lugar, solo reconocen el punto (.) como separador decimal válido. Los análogos culturalmente conscientes de estas funciones son:
Conversiones que usan la referencia cultural actual. Las
CStrfunciones yFormatconvierten un número en una cadena y lasCDblfunciones yCIntconvierten una cadena en un número.Conversiones que usan una referencia cultural específica. Cada objeto number tiene un
ToString(IFormatProvider)método que convierte un número en una cadena y unParse(String, IFormatProvider)método que convierte una cadena en un número. Por ejemplo, elDoubletipo proporciona los ToString(IFormatProvider) métodos y Parse(String, IFormatProvider) .
Para obtener más información, vea Str y Val.
Usar una cultura específica
Imagine que está desarrollando una aplicación que envía una fecha (con formato de cadena) a un servicio web. En este caso, la aplicación debe usar una referencia cultural específica para la conversión de cadenas. Para ilustrar el motivo, observe el resultado del uso del método ToString() de la fecha: si la aplicación usa ese método para dar formato a la fecha del 4 de julio de 2005, devolverá "7/4/2005 12:00:00 AM" cuando se ejecute con la referencia cultural de inglés de Estados Unidos (en-US), pero devolverá "04.07.2005 00:00:00" si se ejecuta con la referencia cultural alemana (de-DE).
Cuando necesite realizar una conversión de cadena en un formato de cultura específico, debe usar la clase integrada CultureInfo en el .NET Framework. Puede crear un nuevo CultureInfo objeto para una referencia cultural específica pasando el nombre de la referencia cultural al CultureInfo constructor. Los nombres de las culturas admitidas se enumeran en la página de ayuda de la clase CultureInfo.
Como alternativa, puede obtener una instancia de la cultura invariable mediante la propiedad CultureInfo.InvariantCulture. La referencia cultural invariable se basa en la cultura inglesa, pero hay algunas diferencias. Por ejemplo, la referencia cultural invariable especifica un reloj de 24 horas en lugar de un reloj de 12 horas.
Para convertir una fecha a la cadena de la referencia cultural, pase el objeto CultureInfo al método ToString(IFormatProvider) del objeto de fecha. Por ejemplo, el código siguiente muestra "07/04/2005 00:00:00", independientemente de la configuración cultural de la aplicación.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
Nota:
Los literales de fecha siempre se interpretan según la referencia cultural inglesa.
Comparación de cadenas
Hay dos situaciones importantes en las que se necesitan comparaciones de cadenas:
Ordenar los datos para mostrar al usuario. Use operaciones basadas en la referencia cultural actual para que las cadenas se ordenen correctamente.
Determinar si dos cadenas internas de aplicación coinciden exactamente (normalmente con fines de seguridad). Use operaciones que omitan la referencia cultural actual.
Puede realizar ambos tipos de comparaciones con la función de Visual Basic StrComp . Especifique el argumento opcional Compare para controlar el tipo de comparación: Text para la mayoría de las entradas y salidas Binary para determinar coincidencias exactas.
La StrComp función devuelve un entero que indica la relación entre las dos cadenas comparadas en función del criterio de ordenación. Un valor positivo para el resultado indica que la primera cadena es mayor que la segunda cadena. Un resultado negativo indica que la primera cadena es más pequeña y cero indica la igualdad entre las cadenas.
' 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)
También puede usar el correspondiente de .NET Framework de la función StrComp, el método String.Compare. Se trata de un método estático sobrecargado de la clase de cadena base. En el ejemplo siguiente se muestra cómo se usa este método:
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
Para un control más preciso sobre cómo se realizan las comparaciones, puede usar sobrecargas adicionales del método Compare. Con el String.Compare método , puede usar el argumento para especificar el comparisonType tipo de comparación que se va a usar.
Valor del comparisonType argumento |
Tipo de comparación | Cuándo usar |
|---|---|---|
Ordinal |
Comparación basada en los bytes que componen las cadenas. | Use este valor al comparar: identificadores que distinguen mayúsculas de minúsculas, configuraciones relacionadas con la seguridad u otros identificadores no lingüísticos en los que los bytes deben coincidir exactamente. |
OrdinalIgnoreCase |
Comparación basada en los bytes que componen las cadenas.OrdinalIgnoreCase usa la información de referencia cultural invariable para determinar cuándo dos caracteres solo difieren en mayúsculas. |
Use este valor al comparar: identificadores que no distinguen mayúsculas de minúsculas, configuraciones relacionadas con la seguridad y datos almacenados en Windows. |
CurrentCulture o CurrentCultureIgnoreCase |
Comparación basada en la interpretación de las cadenas de la referencia cultural actual. | Use estos valores al comparar: datos que se muestran al usuario, la mayoría de los datos de entrada del usuario y otros datos que requieren interpretación lingüística. |
InvariantCulture o InvariantCultureIgnoreCase |
Comparación basada en la interpretación de las cadenas de la referencia cultural invariable. Esto es diferente de Ordinal y OrdinalIgnoreCase, porque la referencia cultural invariable trata los caracteres fuera de su intervalo aceptado como caracteres invariables equivalentes. |
Use estos valores solo al comparar datos persistentes o mostrar datos relevantes lingüísticamente que requieran un criterio de ordenación fijo. |
Consideraciones de seguridad
Si la aplicación toma decisiones de seguridad basadas en el resultado de una operación de comparación o cambio de mayúsculas y minúsculas, la operación debe usar el método String.Compare y pasar Ordinal o OrdinalIgnoreCase para el argumento comparisonType.