GetStringTypeW 函数 (stringapiset.h)
注意
对于某些 Unicode 字符(尤其是补充范围中的字符),此 API 可能具有不完整/过时的信息。 若要获取更准确和全面的 Unicode 字符类型信息,请考虑使用等效的 ICU API,例如 u_charType、u_islower、u_isspace和 u_ispunct。 有关在 Windows 上使用 ICU API 的指导,请参阅 Windows上的 ICU 入门。
检索指定 Unicode 源字符串中字符的字符类型信息。 对于字符串中的每个字符,该函数在输出数组的对应 16 位元素中设置一个或多个位。 每个位都标识给定字符类型,例如字母、数字或两者均未指定。
语法
BOOL GetStringTypeW(
[in] DWORD dwInfoType,
[in] _In_NLS_string_(cchSrc)LPCWCH lpSrcStr,
[in] int cchSrc,
[out] LPWORD lpCharType
);
参数
[in] dwInfoType
指定要检索的字符类型信息的标志。 此参数可以具有以下值。 字符类型分为不同级别,如“备注”部分所述。
旗 | 意义 |
---|---|
|
检索字符类型信息。 |
|
检索双向布局信息。 |
|
检索文本处理信息。 |
[in] lpSrcStr
指向要为其检索字符类型的 Unicode 字符串的指针。 如果 cchSrc 设置为任何负值,则假定字符串为 null 终止。
[in] cchSrc
lpSrcStr指示的字符串的大小(以字符为单位)。 如果大小包含终止 null 字符,则该函数将检索该字符的字符类型信息。 如果应用程序将大小设置为任何负整数,则假定源字符串为 null 终止,并且该函数会自动计算大小,并附加 null 终止字符。
[out] lpCharType
指向 16 位值的数组的指针。 此数组的长度必须足够大,才能接收源字符串中每个字符的一个 16 位值。 如果 cchSrc 不是负数,lpCharType 应是包含 cchSrc 元素的单词数组。 如果 cchSrc 设置为负数,则 lpCharType 是包含 lpSrcStr + 1 个元素的单词数组。 函数返回时,此数组包含一个对应于源字符串中每个字符的单词。
返回值
如果成功,则返回非零值,否则返回 0。 若要获取扩展的错误信息,应用程序可以调用 GetLastError,这会返回以下错误代码之一:
- ERROR_INVALID_FLAGS。 为标志提供的值无效。
- ERROR_INVALID_PARAMETER。 任何参数值都无效。
言论
有关字符串函数用法的概述,请参阅 字符串。
lpSrcStr 和 lpCharType 参数的值不得相同。 如果相同,则函数会失败并ERROR_INVALID_PARAMETER。
此函数不使用相应的 GetStringTypeA 函数使用的 Locale 参数。 由于参数差异,应用程序无法使用 #define UNICODE 开关自动调用 GetStringType* 函数的正确 ANSI 或 Unicode 版本。 应用程序可以使用 GetStringTypeEx来规避此限制,这是推荐的函数。
支持的字符类型
字符类型位分为多个级别。 可以通过对此函数的单个调用来检索一个级别的信息。 每个级别限制为 16 位信息,以便其他映射函数(每个字符的表示形式限制为 16 位)也可以返回字符类型信息。
Ctype 1
这些类型支持 ANSI C 和 POSIX (LC_CTYPE) 字符键入函数。 当 dwInfoType 设置为CT_CTYPE1时,输出缓冲区中的数组中将检索这些值的按位 OR。 对于 DBCS 区域设置,类型属性适用于窄字符和宽字符。 日语平假名和片假名字符以及汉字象形字字符都具有C1_ALPHA属性。
名字 | 价值 | 意义 |
---|---|---|
C1_UPPER | 0x0001 | 大写 |
C1_LOWER | 0x0002 | 小写 |
C1_DIGIT | 0x0004 | 十进制数字 |
C1_SPACE | 0x0008 | 空格字符 |
C1_PUNCT | 0x0010 | 标点 |
C1_CNTRL | 0x0020 | 控制字符 |
C1_BLANK | 0x0040 | 空白字符 |
C1_XDIGIT | 0x0080 | 十六进制数字 |
C1_ALPHA | 0x0100 | 任何语言字符:字母、教学大纲或象形字 |
C1_DEFINED | 0x0200 | 已定义字符,但不是其他C1_* 类型之一 |
以下字符类型可以是常量类型,也可以是基本类型的可理解类型,不需要此函数支持。
类型 | 描述 |
---|---|
字母 | 字母字符和数字(C1_ALPHA和C1_DIGIT) |
打印 | 图形字符和空白(除C1_CNTRL以外的所有C1_* 类型) |
Ctype 2
这些类型支持 Unicode 文本的正确布局。 对于 DBCS 区域设置,字符类型适用于窄字符和宽字符。 分配方向属性,以便 Unicode 标准化的双向布局算法产生准确的结果。 这些类型是相互排斥的。 有关使用这些属性的详细信息,请参阅 Unicode 标准。
名字 | 价值 | 意义 |
---|---|---|
强 | ||
C2_LEFTTORIGHT | 0x0001 | 从左到右 |
C2_RIGHTTOLEFT | 0x0002 | 从右到左 |
弱 | ||
C2_EUROPENUMBER | 0x0003 | 欧洲数字、欧洲数字 |
C2_EUROPESEPARATOR | 0x0004 | 欧洲数字分隔符 |
C2_EUROPETERMINATOR | 0x0005 | 欧洲数字终止符 |
C2_ARABICNUMBER | 0x0006 | 阿拉伯文数字 |
C2_COMMONSEPARATOR | 0x0007 | 通用数值分隔符 |
中性 | ||
C2_BLOCKSEPARATOR | 0x0008 | 块分隔符 |
C2_SEGMENTSEPARATOR | 0x0009 | 段分隔符 |
C2_WHITESPACE | 0x000A | 空白 |
C2_OTHERNEUTRAL | 0x000B | 其他中性 |
不適用 | ||
C2_NOTAPPLICABLE | 0x0000 | 无隐式方向性(例如控制代码) |
Ctype 3
这些类型旨在用作常规文本处理或标准 C 库函数所需的 POSIX 类型的扩展的占位符。 当 dwInfoType 设置为CT_CTYPE3时,将检索这些值的按位 OR。 对于 DBCS 区域设置,Ctype 3 属性适用于窄字符和宽字符。 日语平假名和片假名字符以及汉字象形字字符都具有C3_ALPHA属性。
名字 | 价值 | 意义 |
---|---|---|
C3_NONSPACING | 0x0001 | 非节奏标记 |
C3_DIACRITIC | 0x0002 | 音调符号非节奏标记 |
C3_VOWELMARK | 0x0004 | 元音非节奏标记 |
C3_SYMBOL | 0x0008 | 象征 |
C3_KATAKANA | 0x0010 | 片假名字符 |
C3_HIRAGANA | 0x0020 | 平假名字符 |
C3_HALFWIDTH | 0x0040 | 半角(窄)字符 |
C3_FULLWIDTH | 0x0080 | 全角(宽)字符 |
C3_IDEOGRAPH | 0x0100 | 象形字字符 |
C3_KASHIDA | 0x0200 | 阿拉伯文 kashida 字符 |
C3_LEXICAL | 0x0400 | 标点符号算作单词的一部分(kashida、连字符、女性/男性序号指示器、等号) |
C3_ALPHA | 0x8000 | 所有语言字符(字母顺序、音节和象形字) |
C3_HIGHSURROGATE | 0x0800 | Windows Vista: 高代理项代码单元 |
C3_LOWSURROGATE | 0x1000 | Windows Vista: 低代理项代码单元 |
不適用 | ||
C3_NOTAPPLICABLE | 0x0000 | 不適用 |
C3_HIGHSURROGATE和C3_LOWSURROGATE仅针对完整性列出,不应提供给此函数。 它们仅与 Unicode 相关。
从 Windows 8 开始 :GetStringTypeW 在 Stringapiset.h 中声明。 在 Windows 8 之前,它在 Winnls.h 中声明。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 2000 Professional [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | stringapiset.h (包括 Windows.h) |
库 | Kernel32.lib |
DLL | Kernel32.dll |