Влияние языка и региональных параметров на строки в Visual Basic
На этой странице справки описывается, как Visual Basic использует сведения о языках и региональных параметрах для выполнения преобразования строк и сравнения.
Когда следует использовать строки, зависящие от языка и региональных параметров
Как правило, следует использовать строки, зависящие от языка и региональных параметров, для всех данных, представленных пользователям, и читать их пользователями, а также использовать инвариантные строки языка и региональных параметров для внутренних данных приложения.
Например, если приложение просит пользователей ввести дату в виде строки, оно должно ожидать, что пользователи будут форматировать строки в соответствии со своим языком и региональными параметрами, а приложение должно соответствующим образом преобразовать строку. Если приложение отображает эту дату в пользовательском интерфейсе, она должна представить ее в языке и региональных параметрах пользователя.
Однако если приложение отправляет дату на центральный сервер, оно должно отформатировать строку в соответствии с одним языком и региональными параметрами, чтобы предотвратить путаницу между потенциально разными форматами дат.
Функции с учетом языка и региональных параметров
Все функции преобразования строк Visual Basic (за исключением Str
функций и Val
функций) используют сведения о языках и региональных параметрах приложения, чтобы убедиться, что преобразования и сравнения подходят для языка и региональных параметров пользователя приложения.
Ключ успешного использования функций преобразования строк в приложениях, работающих на компьютерах с разными параметрами языка и региональных параметров, заключается в том, чтобы понять, какие функции используют определенный параметр языка и региональных параметров, а также использовать текущий параметр языка и региональных параметров. Обратите внимание, что параметры языка и региональных параметров приложения по умолчанию наследуются от параметров и региональных параметров операционной системы. Дополнительные сведения см. в разделе Asc, AscW, ChrWChrFormat, Hex, Octи Функции преобразования типов.
Функции Str
(преобразовывают числа в строки) и Val
(преобразует строки в числа) не используют сведения о языках и региональных параметрах приложения при преобразовании между строками и числами. Вместо этого они распознают только период (.) как допустимый десятичный разделитель. Известные в культуре аналоги этих функций:
Преобразования, использующие текущий язык и региональные параметры.
Format
ФункцииCStr
преобразуют число в строку, аCDbl
CInt
функции преобразуют строку в число.Преобразования, использующие определенный язык и региональные параметры. Каждый объект 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 |
Сравнение на основе интерпретации строк в инвариантном языке и региональных параметров. Это отличается от Ordinal OrdinalIgnoreCase и, поскольку инвариантный язык и региональные параметры обрабатывают символы вне принятого диапазона как эквивалентные инвариантные символы. |
Используйте эти значения только при сравнении сохраняемых данных или отображении лингвистических данных, требующих фиксированного порядка сортировки. |
Соображения безопасности
Если приложение принимает решения по безопасности на основе результата операции сравнения или изменения регистра, операция должна использовать String.Compare метод и передать Ordinal
или OrdinalIgnoreCase
для аргумента comparisonType
.