Влияние языка и региональных параметров на строки в Visual Basic

На этой странице справки описывается, как Visual Basic использует сведения о языках и региональных параметрах для выполнения преобразования строк и сравнения.

Когда следует использовать строки, зависящие от языка и региональных параметров

Как правило, следует использовать строки, зависящие от языка и региональных параметров, для всех данных, представленных пользователям, и читать их пользователями, а также использовать инвариантные строки языка и региональных параметров для внутренних данных приложения.

Например, если приложение просит пользователей ввести дату в виде строки, оно должно ожидать, что пользователи будут форматировать строки в соответствии со своим языком и региональными параметрами, а приложение должно соответствующим образом преобразовать строку. Если приложение отображает эту дату в пользовательском интерфейсе, она должна представить ее в языке и региональных параметрах пользователя.

Однако если приложение отправляет дату на центральный сервер, оно должно отформатировать строку в соответствии с одним языком и региональными параметрами, чтобы предотвратить путаницу между потенциально разными форматами дат.

Функции с учетом языка и региональных параметров

Все функции преобразования строк Visual Basic (за исключением Str функций и Val функций) используют сведения о языках и региональных параметрах приложения, чтобы убедиться, что преобразования и сравнения подходят для языка и региональных параметров пользователя приложения.

Ключ успешного использования функций преобразования строк в приложениях, работающих на компьютерах с разными параметрами языка и региональных параметров, заключается в том, чтобы понять, какие функции используют определенный параметр языка и региональных параметров, а также использовать текущий параметр языка и региональных параметров. Обратите внимание, что параметры языка и региональных параметров приложения по умолчанию наследуются от параметров и региональных параметров операционной системы. Дополнительные сведения см. в разделе Asc, AscW, ChrWChrFormat, Hex, Octи Функции преобразования типов.

Функции Str (преобразовывают числа в строки) и Val (преобразует строки в числа) не используют сведения о языках и региональных параметрах приложения при преобразовании между строками и числами. Вместо этого они распознают только период (.) как допустимый десятичный разделитель. Известные в культуре аналоги этих функций:

  • Преобразования, использующие текущий язык и региональные параметры. Format Функции CStr преобразуют число в строку, а CDblCInt функции преобразуют строку в число.

  • Преобразования, использующие определенный язык и региональные параметры. Каждый объект number имеет ToString(IFormatProvider) метод, который преобразует число в строку, и Parse(String, IFormatProvider) метод, который преобразует строку в число. Например, тип Double предоставляет ToString(IFormatProvider) методы и Parse(String, IFormatProvider) методы.

Дополнительные сведения см. в разделах Str и Val.

Использование определенного языка и региональных параметров

Представьте, что вы разрабатываете приложение, которое отправляет дату (отформатированную как строку) в веб-службу. В этом случае приложение должно использовать определенный язык и региональные параметры для преобразования строк. Чтобы проиллюстрировать причину, рассмотрим результат использования метода датыToString(): если приложение использует этот метод для форматирования даты 4 июля, 2005, он возвращает значение "7/4.2005 12:00:00", когда выполняется с языком США английский (en-US), но возвращает значение "04.07.2005 00:00:00" при запуске с немецким языком (de-DE).

Если необходимо выполнить преобразование строк в определенном формате языка и региональных параметров, следует использовать CultureInfo класс, встроенный в платформа .NET Framework. Вы можете создать новый CultureInfo объект для определенного языка и региональных параметров, передав имя языка и региональных параметров конструктору CultureInfo . Поддерживаемые имена языков и региональных параметров перечислены на CultureInfo странице справки класса.

Кроме того, можно получить экземпляр инвариантного языка и региональных параметров из CultureInfo.InvariantCulture свойства. Инвариантная культура основана на английском языке, но существуют некоторые различия. Например, инвариантный язык и региональные параметры указывают 24-часовые часы вместо 12-часовых часов.

Чтобы преобразовать дату в строку языка и региональных параметров, передайте CultureInfo объект в метод объекта ToString(IFormatProvider) date. Например, следующий код отображает "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)

Вы также можете использовать платформа .NET Framework партнера StrComp функции, String.Compare метода. Это статический перегруженный метод базового строкового класса. В следующем примере показано, как используется этот метод:

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 Сравнение на основе интерпретации строк в инвариантном языке и региональных параметров.

Это отличается от OrdinalOrdinalIgnoreCaseи, поскольку инвариантный язык и региональные параметры обрабатывают символы вне принятого диапазона как эквивалентные инвариантные символы.
Используйте эти значения только при сравнении сохраняемых данных или отображении лингвистических данных, требующих фиксированного порядка сортировки.

Соображения безопасности

Если приложение принимает решения по безопасности на основе результата операции сравнения или изменения регистра, операция должна использовать String.Compare метод и передать Ordinal или OrdinalIgnoreCase для аргумента comparisonType .

См. также