Функция FindNLSStringEx (winnls.h)
Находит строку Юникода (расширенные символы) или ее эквивалент в другой строке Юникода для языкового стандарта, указанного именем.
Синтаксис
int FindNLSStringEx(
[in, optional] LPCWSTR lpLocaleName,
[in] DWORD dwFindNLSStringFlags,
[in] LPCWSTR lpStringSource,
[in] int cchSource,
[in] LPCWSTR lpStringValue,
[in] int cchValue,
[out, optional] LPINT pcchFound,
[in, optional] LPNLSVERSIONINFO lpVersionInformation,
[in, optional] LPVOID lpReserved,
[in, optional] LPARAM sortHandle
);
Параметры
[in, optional] lpLocaleName
Указатель на имя языкового стандарта или одно из следующих предопределенных значений.
[in] dwFindNLSStringFlags
Флаги, указывающие сведения об операции поиска. Эти флаги являются взаимоисключающими, по умолчанию используется FIND_FROMSTART. Приложение может указать только один из флагов поиска с любым из флагов фильтрации, определенных в следующей таблице. Если в приложении не указан флаг, функция использует сравнение по умолчанию для указанного языкового стандарта. Как описано в разделе Обработка сортировки в приложениях, режим двоичного сравнения отсутствует.
Приложение может использовать флаги фильтрации, определенные ниже, в сочетании с флагом поиска.
[in] lpStringSource
Указатель на исходную строку, в которой функция ищет строку, заданную lpStringValue.
[in] cchSource
Размер в символах, за исключением завершающего символа NULL строки, указанной lpStringSource. Приложение не может указать 0 или любое отрицательное число, отличное от -1, для этого параметра. Приложение указывает -1, если исходная строка завершается null и функция должна вычислять размер автоматически.
[in] lpStringValue
Указатель на строку поиска, для которой функция выполняет поиск в исходной строке.
[in] cchValue
Размер строки, указанной lpStringValue, в символах, за исключением завершающего пустого символа. Приложение не может указать 0 или любое отрицательное число, отличное от -1, для этого параметра. Приложение указывает значение -1, если строка поиска завершается null и функция должна автоматически вычислить размер.
[out, optional] pcchFound
Указатель на буфер, содержащий длину строки, которую находит функция. Строка может быть длиннее или короче строки поиска. Если функции не удается найти строку поиска, этот параметр не изменяется.
Функция может получить значение NULL в этом параметре. В этом случае функция не указывает, отличается ли длина найденной строки от длины исходной строки.
Обратите внимание, что значение pcchFound часто идентично значению, указанному в cchValue, но может отличаться в следующих случаях:
- Значение, указанное в cchValue , отрицательное.
- Строки эквивалентны, но имеют разную длину. Например, "A" и "Объединяющее кольцо" (U+0041 U+030A) эквивалентно "кольцо A" (U+00c5).
[in, optional] lpVersionInformation
Защищены; значение должно иметь значение NULL.
[in, optional] lpReserved
Защищены; значение должно иметь значение NULL.
[in, optional] sortHandle
Защищены; значение должно иметь значение 0.
Возвращаемое значение
В случае успешного выполнения возвращает индекс на основе 0 в исходную строку, указанную lpStringSource . В сочетании со значением в pcchFound этот индекс предоставляет точное расположение всей найденной строки в исходной строке. Возвращаемое значение 0 является индексом без ошибок в исходной строке, а соответствующая строка находится в исходной строке со смещением 0.
Функция возвращает значение -1, если не удалось. Чтобы получить расширенные сведения об ошибке, приложение может вызвать Метод GetLastError, который может возвращать один из следующих кодов ошибок:
- ERROR_INVALID_FLAGS. Значения, указанные для флагов, были недопустимыми.
- ERROR_INVALID_PARAMETER. Любое из значений параметров было недопустимым.
- ERROR_SUCCESS. Действие успешно завершено, но не дало результатов.
Комментарии
Эта функция предоставляет различные параметры поиска, включая направление поиска, фильтрацию эквивалентности символов и фильтрацию по конкретному языковому стандарту. Обратите внимание, что эквивалентность зависит от языкового стандарта и флагов, указанных в вызове функции. Флаги фильтрации могут изменять результаты поиска. Например, потенциальные совпадения увеличиваются, если функция игнорирует регистр или диакритические метки при выполнении поиска.
По умолчанию эта функция сопоставляет нижний регистр "i" с верхним регистром "I", даже если параметр Locale указывает турецкий (Турция) или азербайджанский (Азербайджан). Чтобы переопределить это поведение для турецкого или азербайджанского языка, приложение должно указать NORM_LINGUISTIC_CASING. Если этот флаг указан для правильного языкового стандарта, "ı" (нижний регистр без точек I) — это строчная форма "I" (прописная буква I), а "i" (строчная точка I) — строчная форма "ı" (точечная буква I).
Для многих сценариев (в частности, латинских) NORM_IGNORENONSPACE совпадает с LINGUISTIC_IGNOREDIACRITIC, а NORM_IGNORECASE совпадает с LINGUISTIC_IGNORECASE, за следующими исключениями:
- NORM_IGNORENONSPACE игнорирует любое вторичное различие, независимо от того, является ли оно диакритичным. В письмах для корейского, японского, китайского, индического языков это различие используется для целей, отличных от диакритических. LINGUISTIC_IGNOREDIACRITIC игнорирует только фактические диакритические данные, а не просто игнорирует второй вес сортировки.
- NORM_IGNORECASE игнорирует любое третичное различие, независимо от того, является ли оно на самом деле лингвистическим вариантом. Например, в арабских и индийских письмах этот флаг отличает альтернативные формы символа. Однако различия не соответствуют лингвистическому регистру. LINGUISTIC_IGNORECASE игнорирует только фактические лингвистические регистры, а не третий вес сортировки.
Эта функция является одной из немногих функций NLS, которая вызывает SetLastError даже при успешном выполнении. Этот вызов выполняется для очистки последней ошибки в потоке, если она не соответствует строке поиска. Это очищает значение, возвращаемое GetLastError.
Начиная с Windows 8: Если приложение передает языковые теги в эту функцию из пространства имен Windows.Globalization , оно сначала должно преобразовать теги, вызвав ResolveLocaleName.
Требования
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winnls.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
Обработка сортировки в приложениях