Влияние языка и региональных параметров на строки в Visual Basic
В этом разделе справки рассматривается, как Visual Basic использует информацию о языковых и региональных параметрах для выполнения строковых преобразований и сравнений.
Когда использовать строки, специфичные для языковых и региональных параметров
Обычно следует использовать строки, специфичные для языковых и региональных параметров, для всех данных, адресованных пользователям, и строки, не зависящие от языковых и региональных параметров, для внутренних данных приложения.
Например, если приложение запрашивает пользователя на ввод данных как строки, оно должно ожидать, что пользователь введет строку, соответствующую формату его языковых и региональных параметров, и приложение должно соответственно конвертировать эту строку.Если приложение затем представляет эти данные в пользовательский интерфейс, оно должно представлять их в формате языковых и региональных параметров пользователя.
Однако, если приложение загружает данные на центральный сервер, оно должно отформатировать строку в соответствии с одними определенными языковыми и региональными параметрами для предотвращения путаницы между потенциально разными форматами данных.
Функции, чувствительные к языковым и региональным параметрам
Все функции преобразования строк Visual Basic (кроме Str и Val) используют информацию о языковых и региональных параметрах, к которой принадлежит пользователь, чтобы проверить, что преобразования и сравнения соответствуют ей.
Ключом к успеху в использовании функций преобразования строк в приложениях, выполняющихся на компьютерах с разными настройками языковых и региональных параметров является понимание того, какие функции используют специфичные установки для языковых и региональных параметров, а какие — текущие.Следует иметь ввиду, что установки приложения для языковых и региональных параметров по умолчанию наследуются из установок для языковых и региональных параметров операционной системы.Дополнительные сведения см. в разделах Asc, AscW, Chr, ChrW, Format, Hex, Oct и Функции преобразования типов (Visual Basic).
Функции Str (преобразование чисел в строки) и Val (преобразование строк в числа) не используют информацию приложения о языковых и региональных параметрах при преобразовании между строками и числами.Напротив, они распознают только точку (.) в качестве допустимого десятичного разделителя.Аналогами этих функций, учитывающими особенности языковых и региональных параметров, являются:
Преобразования, использующие текущие установки языковых и региональных параметров. Функции CStr и Format преобразуют число в строку, а функции CDbl и CInt преобразуют строку в число.
Преобразования, использующие специфические установки языковых и региональных параметров. Каждый числовой объект имеет метод ToString(IFormatProvider), который преобразует число в строку, и метод Parse(String, IFormatProvider), преобразовывающий строку в число.Например, тип Double предоставляет методы ToString(IFormatProvider) и Parse(String, IFormatProvider).
Дополнительные сведения см. в разделах Str и Val.
Использование определенных языковых и региональных параметров
Допустим, что разрабатывается приложение, которое отправляет дату (форматированную как строку) веб-службе.В этом случае приложение должно использовать определенные языковые и региональные параметры для преобразования строки.Чтобы объяснить, зачем это нужно, рассмотрим результат использования метода даты ToString(): если приложение использует этот метод для форматирования даты "July 4, 2005", он возвращает "7/4/2005 12:00:00 AM" при работе с установкой "United States English (en-US)" и "04.07.2005 00:00:00" при работе с установкой "German (de-DE)".
При необходимости переобразовать строку в специфичный для языковых и региональных параметров формат, следует использовать класс CultureInfo, встроенный в .NET Framework.Можно создать новый объект CultureInfo для определенных языковых и региональных параметров, передав имя этих параметров конструктору CultureInfo.Поддерживаемые имена языковых и региональных параметров приведены в разделе справки для класса CultureInfo.
С другой стороны, можно получить экземпляр независимых языковых и региональных параметров от свойства CultureInfo.InvariantCulture.Независимые языковые и региональные параметры основаны на английских языковых и региональных параметрах, но существуют некоторые различия.Например, независимые языковые и региональные параметры использует 24-часовой формат времени вместо 12-часового.
Для преобразования даты в строку, специфичную для определенных языковых и региональных параметров, передайте объект CultureInfo методу объекта данных ToString(IFormatProvider).Например, следующий код отображает "07/04/2005 00:00:00" независимо от установок приложения для языковых и региональных параметров.
Dim d As Date = #7/4/2005#
MsgBox(d.ToString(System.Globalization.CultureInfo.InvariantCulture))
Примечание |
---|
Буквы даты всегда преобразуются в соответствии с английскими языковыми и региональными параметрами. |
Сравнение строк
Существуют две важные ситуации, когда необходимы сравнения строк:
Сортировка данных для отображения пользователю. Используйте операции, основанные на текущих установках языковых и региональных параметров, чтобы строки можно было соответственно отсортировать.
Принятие решения о том, существует ли точное соответствие между двумя строками, используемыми внутри приложения (обычно для целей безопасности). Используйте операции, которые не зависят от текущих установок языковых и региональных параметров.
Оба типа сравнений можно выполнить с помощью функции Visual Basic StrComp.Опишите дополнительный аргумент Compare для управления типом сравнения: Text для большей части ввода и вывода, Binary для определения точных соответствий.
Функция StrComp возвращает целочисленное значение, отражающее связь между двумя сравниваемыми строками на основе порядка сортировки.Положительное значение означает, что первая строка "больше" второй.Отрицательный результат возвращается в случае, если первая строка "меньше" второй, а нулевое значение отражает равенство между строками.
' 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)
Можно также использовать подобный функции StrComp метод String.Compare .NET Framework.Это статический перегруженный метод базового строкового класса.Следующий пример иллюстрирует использование этого метода:
Dim myString As String = "Alphabetical"
Dim secondString As String = "Order"
Dim result As Integer
result = String.Compare(myString, secondString)
Для более совершенного управления способом выполнения сравнений можно использовать дополнительные перегрузки метода Compare.С методом String.Compare можно использовать аргумент comparisonType для указания используемого типа сравнения.
Значение для аргумента comparisonType |
Тип сравнения |
Условия использования |
Ordinal |
Сравнение на основе байтов, составляющих строку. |
Используйте это значение при сравнении: идентификаторов, чувствительных к регистру, установок, относящихся к безопасности, или других нелингвистических идентификаторов, где байты должны точно соответствовать. |
OrdinalIgnoreCase |
Сравнение на основе байтов, составляющих строку. OrdinalIgnoreCase использует информацию независимых языковых и региональных параметров для определения того, что два символа отличаются только регистром. |
Используйте это значение при сравнении: идентификаторов, не чувствительных к регистру, установок, относящихся к безопасности, или данных, хранящихся в Windows. |
CurrentCulture или CurrentCultureIgnoreCase |
Сравнение на основе интерпретации строк с текущей установкой языковых и региональных параметров. |
Используйте это значение при сравнении: данных, отображаемых пользователю, большинства пользовательского ввода и других данных, требующих лингвистической интерпретации. |
InvariantCulture или InvariantCultureIgnoreCase |
Сравнение на основе интерпретации строк с независимой установкой языковых и региональных параметров. Оно отличается от Ordinal и OrdinalIgnoreCase, поскольку независимые языковые и региональные параметры рассматривают символы, не входящие в их диапазон установок, как эквиваленты независимых символов. |
Используйте эти значения только при сравнении сохраняемых данных или отображении лингвистических данных, требующих фиксированного порядка сортировки. |
Вопросы безопасности
Если приложение принимает решение, связанное с безопасностью, на основе результата сравнения или операции изменения регистра, то необходимо использовать метод String.Compare и передать Ordinal или OrdinalIgnoreCase в качестве аргумента comparisonType.
См. также
Ссылки
Функции преобразования типов (Visual Basic)