GetStringTypeExW 函数 (stringapiset.h)
注意
对于某些 Unicode 字符(尤其是补充范围中的字符),此 API 可能具有不完整/过时的信息。 若要获取更准确和全面的 Unicode 字符类型信息,请考虑使用等效的 ICU API,例如 u_charType、u_islower、u_isspace和 u_ispunct。 有关在 Windows 上使用 ICU API 的指导,请参阅 Windows上的 ICU 入门。
检索指定源字符串中字符的字符类型信息。 对于字符串中的每个字符,该函数在输出数组的对应 16 位元素中设置一个或多个位。 每个位都标识给定字符类型,例如字母、数字或两者均未指定。
语法
BOOL GetStringTypeExW(
[in] LCID Locale,
[in] DWORD dwInfoType,
[in] _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
[in] int cchSrc,
[out] LPWORD lpCharType
);
参数
[in] Locale
指定区域设置的区域设置标识符。 此值唯一定义 ANSI 代码页。 可以使用 MAKELCID 宏创建区域设置标识符或使用以下预定义值之一。
Windows Vista 及更高版本: 还支持以下自定义区域设置标识符。[in] dwInfoType
指定要检索的字符类型信息的标志。 有关可能的标志值,请参阅 GetStringTypeW的 dwInfoType 参数。 有关字符类型位的详细信息,请参阅有关 GetStringTypeW的备注。
[in] lpSrcStr
指向要为其检索字符类型的字符串的指针。 如果 cchSrc 设置为任何负值,则假定字符串为 null 终止。
[in] cchSrc
lpSrcStr指示的字符串的大小(以字符为单位)。 大小是指 Unicode 版本的函数的 ANSI 版本或宽字符的字节。 如果大小包含终止 null 字符,则该函数将检索该字符的字符类型信息。 如果应用程序将大小设置为任何负整数,则假定源字符串为 null 终止,并且该函数会自动计算大小,并附加 null 终止字符。
[out] lpCharType
指向 16 位值的数组的指针。 此数组的长度必须足够大,才能接收源字符串中每个字符的一个 16 位值。 如果 cchSrc 不是负数,lpCharType 应是包含 cchSrc 元素的单词数组。 如果 cchSrc 设置为负数,则 lpCharType 是包含 lpSrcStr + 1 个元素的单词数组。 函数返回时,此数组包含一个对应于源字符串中每个字符的单词。
返回值
如果成功,则返回非零值,否则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INVALID_FLAGS。 为标志提供的值无效。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
言论
有关字符串函数用法的概述,请参阅 字符串。
使用提供的区域设置的 ANSI 代码页,此函数将源字符串从 ANSI 转换为 Unicode。 然后,分析每个 Unicode 字符的字符类型信息。
此函数的 ANSI 版本将源字符串转换为 Unicode,并调用相应的 GetStringTypeW 函数。 因此,输出缓冲区中的单词不对应于原始 ANSI 字符串,而是对应于其 Unicode 等效项。 从 ANSI 转换为 Unicode 可能会导致字符串长度发生变化,例如,一对 ANSI 字符可以映射到单个 Unicode 字符。 因此,输出缓冲区中的单词与原始 ANSI 字符串中的字符之间的对应关系在所有情况下都不是一对一,例如多字节字符串。 因此,此函数的 ANSI 版本对多字符字符串的使用有限。 建议改为使用 Unicode 版本的函数。
此函数规避了 GetStringTypeA 和 GetStringTypeW之间的参数差异造成的限制。 由于参数差异,应用程序无法使用 #define UNICODE 开关自动调用 GetStringType* 函数的正确 ANSI 或 Unicode 版本。 另一方面,GetStringTypeEx,该开关的行为正确。 因此,建议使用函数。
当此函数的 ANSI 版本与仅 Unicode 区域设置标识符一起使用时,该函数可能会成功,因为操作系统使用系统代码页。 但是,系统代码页中未定义的字符在字符串中显示为问号(?)。
lpSrcStr 和 lpCharType 参数的值不得相同。 如果相同,函数将失败并 ERROR_INVALID_PARAMETER。
区域设置 参数仅用于执行到 Unicode 的字符串转换。 它与应用程序提供的 CTYPE* 值无关。 这些值完全由 Unicode 码位决定,并且不会因区域设置而异。 例如,对于 区域设置的任何值,将希腊文字母指定为C1_ALPHA。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | stringapiset.h (包括 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |